2

我正在尝试从我的第一个 MQL4 专家顾问开始,

我创建了一个struct来处理我的订单:

struct Order
  {
   int               pair;
   int               command;
   double            quantity;
   double            entry;
   double            stopLoss;
   double            profit;
   int               slippage;
   string            comment;
   int               magicNumber;
   datetime          expire;
  };

但似乎我不能这样做:

  Order a;
  Order b=a;

编译器挂起说:

'=' - structure have objects and cannot be copied

我怎样才能分配一个struct

4

2 回答 2

5

我推荐的答案

您可以使用带有指针的类而不是结构,它不能有指针,也不能在里面复制字符串,

示例如下, http://docs.mql4.com/basis/types/object_pointers

阅读本文以了解类与结构 http://docs.mql4.com/basis/types/classes


char数组的替代答案(但对此进行简单更改)

在结构而不是字符串中定义char具有固定大小的数组。

可以使用和处理s 和数组
CharArrayToString( ... )

StringToCharArray( str, array, 0, StringLen( str ) )
stringchar


例子:

struct Order
  {
   int               pair;
   int               command;
   double            quantity;
   double            entry;
   double            stopLoss;
   double            profit;
   int               slippage;
   char              comment[10];
   int               magicNumber;
   datetime          expire;
  };

  Order  a;
  string str = "testing\n";

  StringToCharArray( str, a.comment, 0, StringLen( str ) );

  Order b = a;

  Comment( "Array " + CharArrayToString( b.comment ) );
于 2015-12-17T09:31:42.597 回答
4

正如MQL4 文档所说:

不包含字符串或动态数组对象的结构称为简单结构;这种结构的变量可以自由地相互复制,即使它们是不同的结构。简单结构的变量及其数组可以作为参数传递给从 DLL 导入的函数。

Orderstring由于成员,它不是一个简单的结构。所以你不能用=操作员复制它。删除string成员或逐个成员复制它。

于 2014-10-21T12:37:56.357 回答