我刚刚发现我的代码不能正确编译?这里有编译器提供的构造函数吗?
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 ++
答案 0 :(得分:7)
编译器将为您提供
A()
当且仅当没有用户定义的构造函数时,A(A const &)
,除非您提供四个可能的复制构造函数中的任何一个A(A cv &)
,其中cv
是const
和volatile
的任意组合。< / LI>
醇>
在您的情况下,您已经声明了自己的复制构造函数,这意味着编译器将不提供上述任何一种。
行A a;
需要一个可访问的默认构造函数来编译。
答案 1 :(得分:3)
您在A类中声明为private的构造函数是一个复制构造函数。
每当您为类提供参数化构造函数时,C ++都不会提供默认构造函数(不带参数的构造函数)。您必须明确定义类的默认类构造函数。