如何从MQL中的方法返回对象或结构?

时间:2018-11-10 12:38:47

标签: class pointers struct mql4

var input = [{firstProperty: 'something', money: 3, user: 'john-smith'}, {firstProperty: 'somethingDiff', money: 7, user: 'john-smith'}, {firstProperty: 'somElse', money: 14, user: 'jane-doe'},{firstProperty: 'someOtherThing', money: 2, user: 'jane-doe'}]

var result = Array.from(input.reduce((m, { user, money }) => 
					         m.set(user, { user, totalMoney: (m.get(user) && m.get(user).totalMoney || 0) + money })
					       , new Map)
		      , ([ _, d ]) => d)
       
       
       
console.log(result)

当我编译它时,出现以下错误:

“返回”-结构中包含对象,无法复制。

我只需要创建一个struct或class对象并返回它,我就不想进行任何复制。

我尝试使用&和*组合,但是没有用。我尝试了一个类而不是struct,但也没有用。

我还尝试了如下所示的课程:

struct Person {         
      string FirstName;
      string LastName;
};

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

在运行时通过OnInit()方法访问person.FirstName时,它使我无效的指针访问

2 个答案:

答案 0 :(得分:0)

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

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;

答案 1 :(得分:0)

您可以通过delete(person);删除对象,如果不确定该对象不是null,最好检查if(CheckPointer(object)==POINTER_DYNAMIC)delete(object);

总体上,应该将所有此类对象作为具有相应变量名称的变量,或将它们全部保留在集合中并在最后销毁整个集合。您还可以创建对象的全局变量(在OnInit之前,而不是在任何函数内部),然后在程序结束时将其删除。

关于最初的问题-您不能在结构中包含字符串,而只能使用基元