任何人都可以帮我理解这个错误吗? “隐式声明'classA :: classA()'”的定义

时间:2011-04-23 17:34:34

标签: c++

下面是代码:

#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;
}

4 个答案:

答案 0 :(得分:50)

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

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

      private:
              int p;
};

现在你可以在你已经完成的课程之外写下它的定义。

答案 1 :(得分:6)

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

      private:
              int p;
};

classA:: classA()
{ 
 p = 0;
}

答案 2 :(得分:1)

classA没有名为classA()的成员可以实施。

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

答案 3 :(得分:0)

默认提供空构造函数:这是正确的。但是如果你重新定义它,它就不再是默认的构造函数了。你必须声明并定义它。如果你只声明它(没有正文),它是不正确的:你也必须定义它。如果你在课堂上没有声明的情况下定义它,那也是一个错误。你可以,&#34;结合&#34;声明和定义如下:

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

或者在这种情况下更好:

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