【问题标题】:stack variable or declaration of function [duplicate]堆栈变量或函数声明[重复]
【发布时间】:2012-07-30 04:29:38
【问题描述】:

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

【问题讨论】:

  • 只是为了好玩,如果你在 main() 中声明了这个对象,你会收到这个警告吗?
  • 将参数包装在()mockrecord_register((MockZoneRecord()));

标签: c++ linux g++


【解决方案1】:

您正在体验most vexing parse

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

RegisterRecord mockrecord_register = RegisterRecord(MockZoneRecord());

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

如果你的编译器兼容 C++11,你可以使用这个结构:

RegisterRecord mockrecord_register{MockZoneRecord()};

【讨论】:

    【解决方案2】:

    在参数周围加上括号:

    RegisterRecord mockrecord_register((MockZoneRecord()));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-17
      • 2019-05-09
      • 2018-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      相关资源
      最近更新 更多