简体   繁体   中英

Why does this code not compile correctly?

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

The compiler will provide for you

  1. the default constructor A() if and only if there are no user-defined constructors, and
  2. the copy constructor A(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.

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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM