Reputation: 25868
I just found my code like this does not compile right? Is there any compiler-provided constructor here?
class A
{
private:
A(const A& n);
};
int main()
{
A a;
}
The error is test.cpp:18: error: no matching function for call to ‘A::A()’ test.cpp:11: note: candidates are: A::A(const A&)
I am using g++ under Ubuntu 8.04
Upvotes: 0
Views: 190
Reputation: 32635
The compiler will provide for you
A()
if and only if there are no user-defined constructors, andA(A const &)
unless you provide either of the four possible copy constructors A(A cv &)
, where cv
is any combination of const
and volatile
.In your case, you've declared your own copy constructor, which means that the compiler will provide neither of the above.
The line A a;
needs an accessible default constructor to compile.
Upvotes: 7
Reputation: 2447
The constructor you declared private in class A is a copy constructor.
Whenever you provide a parameterised constructor for a class C++ won't provide a default constructor ( one taking no arguments ). You have to explicitly define the default class constructor for your class.
Upvotes: 3