首页 > 解决方案 > 如何从 MQL 中的方法返回对象或结构?

问题描述

struct Person {         
      string FirstName;
      string LastName;
};

class Builder {   
   public:      
   Person Builder::Build() {
      Person person;
      person.FirstName = "FirstName";
      person.LastName = "LastName";
      return person;   
   };  
};

当我编译它时,它给了我以下错误:

'return' - 结构有对象并且不能被复制。

我只需要创建一个结构或类对象并返回它,我不想做任何复制。

我尝试使用 & 和 * 组合,但没有奏效。我尝试使用类而不是结构,但它也不起作用。

我还尝试了如下所示的类:

class Person {   
   public:      
      string FirstName;
      string LastName;
};

class Builder {   
   public:      
   Person* Build() {
      Person person;
      person.FirstName = "FirstName";
      person.LastName = "LastName";
      return &person;   
   };  
};
int OnInit()
  {  

   Builder builder;
   Person* person = builder.Build();
   string firstName = person.FirstName;
   return(INIT_SUCCEEDED);
  }

在运行时在 OnInit() 方法中访问 person.FirstName 时,它​​给了我无效的指针访问。

标签: classpointersstructmql4

解决方案


找到了答案,但如何避免内存泄漏?使用后如何销毁对象及其指针?

class cPerson {   
      public:      
         string FirstName;
         string LastName;
   };

   class cBuilder {   
      public:      
      cPerson* Build() {
         cPerson* person = new cPerson();
         person.FirstName = "firstname";
         return person;   
      };  
   };
cBuilder builder;
   cPerson* person = builder.Build();
   string age = person.FirstName;

推荐阅读