我在file1.h中有两个类:
class ZoneRecord {
public:
//a lof of stuff here
};
class RegisterRecord {
public:
RegisterRecord(ZoneRecord rec); //this function register object rec in a fabric
};
file2.cpp有:
#include "file1.h"
class MockZoneRecord: public ZoneRecord {
public:
MockZoneRecord(): ZoneRecord() {}
};
RegisterRecord mockrecord_register(MockZoneRecord());
除了一件事,这段代码完美编译。它说mockrecord_register是函数的声明。但实际上我想创建一个名为mockrecord_register的RegisterRecord类型的全局对象。如何明确告诉编译器这不是函数原型,而是一个对象?
答案 0 :(得分:4)
您遇到了most vexing parse。
解决此问题的一种方法是使用复制,例如
RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord());
另一种是在yuri kilochek的回答中使用括号。
如果您的编译器兼容C ++ 11,则可以使用此构造:
RegisterRecord mockrecord_register{MockZoneRecord()};
答案 1 :(得分:1)
在参数周围放置括号:
RegisterRecord mockrecord_register((MockZoneRecord()));