当你有10个或更多时,将每个args传递给构造函数是繁琐且不易维护的 - 也使得读取构造函数args非常拖累。
我想使用的模式通常用在Ruby / Node / Python中,希望MQL4中有类似的东西
所以我想将键值对对象传递给包含所有args的构造函数。 不幸的是我得到了 -
struct cannot be defined in param list.
来自编译器。
我在C总计n00b,这是我的第一个MetaQuotes4程序(EA)尝试。我用谷歌搜索并拖网文件。除了文档之外,找不到传递类,数组和结构的东西只能通过引用传递来完成。
问题是第10行。
它加载了编译错误 - 由于这是一个WIP。我可以处理的其余错误但是在params问题中不允许的结构让我感到困惑。任何帮助或建议都会很棒。
也许有另一种模式?
提前致谢。
答案 0 :(得分:1)
MQL4
在许多方面与C++
编译器不相似虽然语法构造函数看起来很相似,但 .MQL4
编译器在MetaLang.exe
编译中限制或禁止实际使用。
所以, struct
看起来很有希望,但不符合您的愿望。
如您的打印屏幕所示,
...
string symbol = params.symbol;
...
您打算在string
中添加 struct
类型值。
虽然这是可行的,但 MQL4
文档却暗示了对此类 struct
使用的限制以及struct
的唯一形式允许在函数调用参数传递中安全使用的只是 SIMPLE STRUCT ,即没有任何字符串组件的struct
(在MQL4
域中花费多年后,对于类似的 专业 ,您可能会 准备 。其中一些内容包含string
内部不是string
,而是struct
并且噩梦刚刚开始......(你可以想象,你的DLL接口等会破坏什么)。
结构名称不能用作标识符(变量或函数的名称)。
或
应该注意的是,在MQL4中,结构元素直接相互跟随,没有对齐。
在C ++中,使用以下指令对编译器进行这样的顺序:
#pragma pack(1)
如果要在结构中进行另一个对齐,请使用辅助成员,“填充”到正确的大小。
和
使用
return
运算符,您无法返回任何数组,类对象,复合结构类型的变量。
所以要小心并从头到尾阅读MQL4文档,因为某些“专业”隐藏在某些地方,人们很难指望它们是先验的。
答案 1 :(得分: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);