当你有10个或更多的参数时,将每个参数传递到一个构造函数中是单调乏味的,而且不太容易维护--这也使得读取构造函数参数变得相当拖累。
我想使用的模式通常用在Ruby/Node/Python中,我希望在MQL4中也有类似的东西
因此,我希望将一个键值对对象传递给包含所有参数的构造函数。不幸的是我得到了-
struct cannot be defined in param list.
来自编译器的。
我是C语言的n00b,这是我第一次尝试MetaQuotes4编程(EA)。我已经在谷歌上搜索过文档了。除了文档上说的传递类、数组和结构只能通过引用传递之外,我找不到任何东西。
问题是第10行。
它加载了编译错误-由于这是一个WIP。其余的错误我可以处理,但是params中不允许的结构问题让我感到困惑。任何帮助或建议都是很棒的。
也许还有另一种模式呢?
提前谢谢。
发布于 2015-09-06 18:39:36
要小心-- MQL4
在很多方面与C++
编译器不同
虽然语法构造函数可能看起来很相似,但在MetaLang.exe
编译器的.MQL4
编译中,实际使用是受到限制或禁止的。
所以,看起来很有前途,但不会满足你的愿望。
如您的打印屏幕所示,
...
string symbol = params.symbol;
...
您计划在struct
中也包含string
类型的值。
虽然这是可能的,但是MQL4
documentation暗示了对这种struct
使用的限制,并且被允许在函数调用参数传递中安全地使用的唯一形式的specialities.仅仅是一个简单结构,即没有任何字符串组件的struct
(在MQL4
领域花费多年之后,您已经为类似的准备了其中一些包括一个string
,它内部不是string
,而是一个struct
,噩梦刚刚开始... (你可以想象,这会在你的DLL上发生什么--接口等。)。
不能将结构名称用作标识符(变量或函数的名称)。
或
应该注意的是,在MQL4结构元素之间直接对齐,没有.In C++,这样的顺序是使用以下指令向编译器做出的:
#pragma pack(1)
如果你想在结构中做另一个对齐,使用辅助成员,“填充”到正确的大小。
和
带有return
运算符的
不能返回任何复合结构类型的数组、类对象和变量。
所以要小心,从头到尾地阅读MQL4文档,因为一些“特长”隐藏在一些地方,人们很难预先预料到它们。
发布于 2019-06-05 15:09:06
您可以将其传递给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);
https://stackoverflow.com/questions/32422569
复制相似问题