Может ли кто-нибудь помочь мне понять эту ошибку? "определение неявно объявленного" 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;
}
Ответы
Ответ 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) {}
};