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

sky*_*oor 0 c++

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

class A
  {

   private:   
      A(const A& n);

  };


int main()
{
        A a;
}
Run Code Online (Sandbox Code Playgroud)

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

我在Ubuntu 8.04下使用g ++

ava*_*kar 7

编译器将为您提供

  1. A()当且仅当没有用户定义的构造函数时,默认构造函数
  2. 拷贝构造函数A(A const &),除非你要么提供四种可能的拷贝构造函数的A(A cv &),其中cv是的任意组合constvolatile.

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

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