为什么这段代码编译不正确?

时间:2010-03-06 05:38:13

标签: c++

我刚刚发现我的代码不能正确编译?这里有编译器提供的构造函数吗?

class A
  {

   private:   
      A(const A& n);

  };


int main()
{
        A a;
}

错误是 test.cpp:18:错误:没有匹配函数来调用'A :: A()' test.cpp:11:注意:候选人是:A :: A(const A&)

我在Ubuntu 8.04下使用g ++

2 个答案:

答案 0 :(得分:7)

编译器将为您提供

  1. 默认构造函数A()当且仅当没有用户定义的构造函数时,
  2. 复制构造函数A(A const &),除非您提供四个可能的复制构造函数中的任何一个A(A cv &),其中cvconstvolatile的任意组合。< / LI>

    在您的情况下,您已经声明了自己的复制构造函数,这意味着编译器将不提供上述任何一种。

    A a;需要一个可访问的默认构造函数来编译。

答案 1 :(得分:3)

您在A类中声明为private的构造函数是一个复制构造函数。

每当您为类提供参数化构造函数时,C ++都不会提供默认构造函数(不带参数的构造函数)。您必须明确定义类的默认类构造函数。