0

我正在尝试将文件读入结构,但由于出现编译错误而失败。看看我尝试了什么:

struct file_row_struct
{
   datetime file_time;
   string file_range_green;
   string file_range_red;
   double file_dist_green_red;
   double file_slope_green;
   double file_slope_red;
   string file_prev_color;
   string file_current_color;   
}filerow[];

int size = 1;
FileReader = FileOpen(file_read_path,FILE_READ|FILE_CSV,','); 
   if(FileReader != INVALID_HANDLE)
   {
   //while(!FileIsEnding(FileReader))
   //   linecount++;
   while(!FileIsEnding(FileReader))
      {
         FileReadStruct(FileReader,filerow,size); 
         size++; 

      }   
   Print("File Opened successfully");
   //PrintFormat("File path: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
   FileClose(FileReader);
   }
   else Print("Not Successful in opening file:  %s  ", GetLastError());

示例文件的要点可在以下位置获得:示例数据

我遇到的编译错误如下:

'filerow' - structures containing objects are not allowed   NeuralExpert.mq5    108 36

请告诉我我错了什么。我的猜测是结构中存在字符串成员函数的可用性,因此它是不允许的。

4

1 回答 1

1

结构是 MQL 中的简单类型。这意味着您可以在其中包含各种整数和浮点值(任何转换为​​ ulong 和 double 的值)以及其他一些值。这也意味着您不能在其中包含字符串和其他结构。如果结构中有字符串 - 你不能通过引用传递和许多其他问题(所以最好说结构中不支持复杂类型,你仍然可能拥有它们,但你有责任正确地做所有事情)。
由于不能通过引用传递结构,因此不能使用FileReadStruct().
怎么办 - 我建议使用一个CObject-based类并CArrayObj持有它们而不是filerow[].

class CFileRow : public CObject
   {
//8 fields
public:
    CFileRow(const string line)
      {
      //convert string line that you are to read from file into class
      }
    ~CFileRow(){}
   };
CArrayObj* fileRowArray = new CArrayObj();

while(!FileIsEnding(FileReader))
  {
     string line=FileReadString(FileReader);
     fileRowArray.Add(new CFileRow(line));
  }
于 2018-05-28T08:29:18.203 回答