2012-08-01 119 views
2

可能重复:
Most vexing parse: why doesn't A a(()); work?堆栈变量或函数声明

我在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

只是出于好玩,做u得到这样的警告()? – 2012-08-01 09:40:02

+0

将参数放在'()'中:'mockrecord_register(((MockZoneRecord()));' – hmjd 2012-08-01 09:40:07

回答

4

您所遇到的most vexing parse。要解决这个

的一种方法是使用复制,像

RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord()); 

另一种是像尤里kilochek答案使用括号。

如果你的编译器是C++ 11兼容的,你可以使用此结构:如果u宣布里面主要这个对象

RegisterRecord mockrecord_register{MockZoneRecord()}; 
1

广场周围的括号参数:

RegisterRecord mockrecord_register((MockZoneRecord()));