使用默认构造函数初始化对象

时间:2011-11-20 15:14:18

标签: c++ class

  

可能重复:
  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() - 它是函数声明吗?

2 个答案:

答案 0 :(得分:4)

MojaKlasa c();

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

MojaKlasa c;

答案 1 :(得分:2)

MojaKlasa c();

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

MojaKlasa c;

定义MojaKlasa类型的对象c。