堆栈变量或函数声明

时间:2012-08-01 09:37:29

标签: c++ linux g++

  

可能重复:
  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类型的全局对象。如何明确告诉编译器这不是函数原型,而是一个对象?

2 个答案:

答案 0 :(得分:4)

您遇到了most vexing parse

解决此问题的一种方法是使用复制,例如

RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord());

另一种是在yuri kilochek的回答中使用括号。

如果您的编译器兼容C ++ 11,则可以使用此构造:

RegisterRecord mockrecord_register{MockZoneRecord()};

答案 1 :(得分:1)

在参数周围放置括号:

RegisterRecord mockrecord_register((MockZoneRecord()));