MQL5中调用类方法为何编译时出现意外标记错误?
MQL5编译错误解决:'ms' - unexpected token, probably type is missing?
错误原因
你代码里的CMktStruct ms();是函数声明,表示声明一个名为ms、无参数、返回CMktStruct类型的函数,而不是创建CMktStruct类的对象实例。编译器识别到ms是函数,后续调用ms.PrintStruct()时就会报错,因为函数没有PrintStruct成员。
修正方案
把对象声明行改成直接实例化的形式:
CMktStruct ms; // 去掉括号,正确创建类对象
修正后完整代码
struct pricePoint{ double price; datetime time; public: pricePoint(){ price = 0; time = 0; } }; class CMktStruct{ pricePoint h[2]; pricePoint l[2]; public: CMktStruct(void); void PrintStruct(){PrintFormat("HiPrice1=%.5f HiTime1=%i; HiPrice2=%.5f HiTime2=%i: LoPrice1=%.5f LoTime1=%i; LoPrice2=%.5f LoTime2=%i",h[0].price,h[0].time,h[1].price,h[1].time,l[0].price,l[0].time,l[1].price,l[1].time);}; }; CMktStruct::CMktStruct(void){ l[0].price = DBL_MAX; l[1].price = DBL_MAX; } CMktStruct ms; // 修正后的对象实例化 ms.PrintStruct();
预期输出
运行修正后的代码,会输出你预期的内容:
HiPrice1=0.00000 HiTime1=0; HiPrice2=0.00000 HiTime2=0: LoPrice1=1.79769e+308 LoTime1=0; LoPrice2=1.79769e+308 LoTime2=0
这是因为pricePoint的构造函数将price和time默认初始化为0,CMktStruct的构造函数仅把l数组的price设为DBL_MAX,h数组元素保持默认初始化值。
内容的提问来源于stack exchange,提问作者Andy Thompson
相关产品推荐
相关产品推荐

