【问题标题】:Initialization of object with default constructor [duplicate]使用默认构造函数初始化对象[重复]
【发布时间】:2012-01-02 09:35:03
【问题描述】:

可能重复:
Most vexing parse: why doesn't A a(()); work?
Difference between creating object with () or without

有这样的代码:

class MojaKlasa{
public:
  MojaKlasa(){}
  MojaKlasa(int i){}
  void fun(){}
};

int main()
{
  MojaKlasa a;
  a.fun();

  MojaKlasa b(1);
  b.fun();

  MojaKlasa c(); //  initialize with default constructor
  //c.fun(); error: request for member ‘fun’ in ‘c’, which is of non-class type ‘MojaKlasa()’

  return 0;
}
  • 为什么对象 c 有错误?
  • 有什么方法可以让它工作?
  • MojaKlasa c() 的真正含义是什么 - 它是函数声明吗?

【问题讨论】:

  • 在 C++ 中查找 最令人烦恼的解析
  • 这不是最烦人的解析,最烦人的解析是当您尝试在直接初始化的声明中使用临时初始化的值作为初始值设定项时。

标签: c++ class


【解决方案1】:
MojaKlasa c();

这声明了一个名为c 的函数返回MojaKlasa,它不是一个对象声明。如果要声明本地对象,则需要省略括号。这只是一个语言规则,编译器必须将此形式解释为函数声明。

MojaKlasa c;

【讨论】:

    【解决方案2】:
    MojaKlasa c();
    

    定义一个返回 MojaKlasa 对象的函数。

    MojaKlasa c;
    

    定义一个 MojaKlasa 类型的对象 c。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2023-03-14
      • 2011-06-17
      • 2011-06-12
      • 2023-04-04
      相关资源
      最近更新 更多