Подтвердить что ты не робот

Может ли кто-нибудь помочь мне понять эту ошибку? "определение неявно объявленного" classA:: classA() "

Вот код:

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

Ответ 1

Вы забыли объявить конструктор в определении класса. Объявите его в разделе public класса (если вы хотите, чтобы клиенты создавали экземпляр, используя его):

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

      private:
              int p;
};

Теперь вы можете написать свое определение вне класса, который вы уже сделали.

Ответ 2

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

      private:
              int p;
};

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

Ответ 3

classA не имеет имени с именем classA() для реализации.

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

Ответ 4

По умолчанию создается пустой конструктор: это правильно. Но если вы его переопределите, это уже не конструктор по умолчанию. Вы должны объявить и определить его. Если вы только объявляете это (без тела), это неверно: вы также должны определить его. Если вы определяете его без объявления в классе, это также ошибка. Вы можете, однако, "объединить" декларацию и определение, написав следующим образом:

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

или в этом случае еще лучше:

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