谁能帮我理解这个错误? "definition of implicitly-declared ‘classA::classA()’"

Can anyone help me understand this error? "definition of implicitly-declared ‘classA::classA()’"

本文关键字:classA of definition implicitly-declared 错误      更新时间:2023-10-16

代码如下:

#include <cstdlib>
#include <iostream>
using namespace std;
class classA
{                   
      protected:
                void setX(int a);
      private:
              int p;
};
classA:: classA()
{                      //error here.
 p = 0;
}
void classA:: setX(int a)
{
 p = a;    
}
int main()
{   
    system("PAUSE");
    return EXIT_SUCCESS;
}

您忘记在类定义中声明构造函数了。在类的public部分声明它(如果你想让客户端使用它创建实例):

class classA
{ 
      public: 
              classA();    // you forgot this!       
      protected:
                void setX(int a);
      private:
              int p;
};

现在你可以在你已经完成的类之外编写它的定义

class classA
{                   
      protected:
                classA(); // you were missing an explicit declaration!
                void setX(int a);
      private:
              int p;
};
classA:: classA()
{ 
 p = 0;
}

classA没有名为classA()的成员要实现。

class classA
{
    // ....
    public:
       classA() ; // Missing the declaration of the default constructor.
};

默认提供一个空构造函数:这是正确的。但是如果你重新定义它,它就不再是默认构造函数了。你必须声明并定义它。如果你只声明它(没有主体),那是不正确的:你还必须定义它。如果没有在类中声明就定义了它,这也是一个错误。不过,你可以这样"组合"声明和定义:

class classA
{
    // ....
    public:
       classA() { p = 0;} 
};

或者在这种情况下更好:

class classA
{
    // ....
    public:
       classA():p(0) {} 
};