1

当你有 10 个或更多时将每个单独的 args 传递给构造函数是乏味的并且不是很容易维护 - 也使得读取构造函数 args 相当麻烦。

我想使用的模式在 Ruby/Node/Python 中很常用,并希望在 MQL4 中有类似的东西

所以我想将一个键值对对象传递给带有所有参数的构造函数。不幸的是,我得到 -

struct cannot be defined in param list. 

从编译器。

我在 C 的总成绩是 n00b,这是我第一次尝试 MetaQuotes4 程序 (EA)。我已经用谷歌搜索并搜索了这些文档。除了文档说传递类、数组和结构只能使用按引用传递来完成之外,找不到任何东西。

问题是第 10 行。

截屏

它加载了编译错误——因为这是一个 WIP。我可以处理的其余错误,但 params 问题中不允许的结构让我感到困惑。任何帮助或建议都会很棒。

也许有另一种模式?

提前致谢。

4

2 回答 2

2

小心 -MQL4在许多方面都不像C++编译器

虽然语法构造函数可能看起来相似,但编译器在.MQL4编译中限制或禁止实际使用MetaLang.exe

所以,struct看起来很有希望,但不符合你的愿望。

如您的打印屏幕所示,

...
string symbol = params.symbol;
...

您计划string在 you 中也包含键入的值struct

虽然这是可能的,但是MQL4文档暗示了对这种用法的限制,并且允许在函数调用参数传递中安全使用struct的唯一形式只是一个简单的结构,即没有任何字符串组件(在域中花费多年之后), 你会为类似的专业做好准备。其中一些包括 a内部不是 a , 但 a噩梦才刚刚开始......(你可以想象, 在你的 DLL 接口等方面内爆是什么。) .structstructMQL4stringstringstruct

结构名称不能用作标识符(变量或函数的名称)。

或者

应该注意的是,在 MQL4 结构中,元素直接相互跟随,没有对齐

在 C++ 中,使用以下指令向编译器发出这样的命令:

#pragma pack(1)

如果要在结构中进行另一次对齐,请使用辅助成员,“填充”到正确的大小。

使用return运算符,您不能返回任何数组、类对象、复合结构类型的变量。

所以要小心并从头到尾阅读 MQL4 文档,因为一些“专业”隐藏在某些地方,人们几乎不会事先预料到它们。

于 2015-09-06T18:39:36.210 回答
0

您可以将它传递给构造函数const StructDef &_var_name,例如:

class Order {

  // Define struct.
  struct Params {
    string symbol;
    double market_entry;
    double loss_pips;
    double profit_pips;
  };
  // Struct class variable.
  Params params;

  public:
  Order(const Params &_params) {
    this.params = _params;
  };

}

然后像这样使用它:

Params params = {_Symbol, Ask};
// or...
params.symbol = _Symbol;
params.market_entry = Ask;
// ... then:
Order *order = new Order(params);

请参阅:结构、类和接口

于 2019-06-05T15:09:06.237 回答