2

可能重复:
最令人头疼的解析:为什么不 A a(()); 工作?

我在 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 类型的全局对象。如何明确告诉编译器这不是函数原型,而是对象?

4

2 回答 2

4

您正在经历最令人烦恼的解析

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

RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord());

另一个是括号的使用,就像 yuri Kilochek 的答案一样。

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

RegisterRecord mockrecord_register{MockZoneRecord()};
于 2012-08-01T09:41:04.923 回答
1

在参数周围放置括号:

RegisterRecord mockrecord_register((MockZoneRecord()));
于 2012-08-01T09:40:15.200 回答