堆栈变量或函数声明

stack variable or declaration of function

本文关键字:声明 函数 变量 堆栈      更新时间:2023-10-16

可能重复:
最令人烦恼的解析:为什么不;t A A(());工作

我在文件中有两个类1.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类型的全局对象。如何明确地告诉编译器这不是一个函数原型,而是一个对象?

您正在经历最麻烦的解析。

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

RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord());

另一个是在尤里·基洛切克的回答中使用了括号。

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

RegisterRecord mockrecord_register{MockZoneRecord()};

在参数周围放括号:

RegisterRecord mockrecord_register((MockZoneRecord()));