Это код, который я пытаюсь понять. У него нет особого использования. Я просто пытаюсь понять, что происходит.
#include<iostream>
using namespace std;
class derivedClass;
class baseClass
{
public:
int objID;
derivedClass* dcObjPtr;
baseClass()
{
cout << "(1) Default constructor" << objID << endl;
}
baseClass(int ID)
{
objID = ID;
dcObjPtr = new derivedClass(1);
cout << "(2) Constructing base object with ID: " << objID << endl;
}
};
class derivedClass : public baseClass
{
public:
derivedClass()
{}
derivedClass(int ID) : baseClass(ID)
{
cout << "(4) Constructing derived object with ID: " << objID << endl;
}
};int main(int argc, char** argv)
{
derivedClass dcObj(1);
return 0;
}
Используя VS2013, я получаю ошибку «производный класс: класс не имеет конструкторов», что, на мой взгляд, не является правильной ошибкой.
Сначала я использовал экземпляр производного класса, а не указатель. И это дало мне странную ошибку насчет точки с запятой. Потом я увидел эта почта где принятый ответ должен был иметь указатель, а не экземпляр.
Вот вопросы, которые у меня есть:
Приветствия.
Вы используете определение derivedClass
прежде чем он будет определен, позвонив new derivedClass
в baseClass
конструктор. Что вам нужно сделать, это переместить определение конструктора за пределы baseClass
и после derivedClass
, вот так:
#include<iostream>
using namespace std;
class derivedClass;
class baseClass
{
public:
int objID;
derivedClass* dcObjPtr;
baseClass()
{
cout << "(1) Default constructor" << objID << endl;
}
baseClass(int ID);
};
class derivedClass : public baseClass
{
public:
derivedClass()
{}
derivedClass(int ID) : baseClass(ID)
{
cout << "(4) Constructing derived object with ID: " << objID << endl;
}
};
baseClass::baseClass(int ID)
{
objID = ID;
dcObjPtr = new derivedClass(1);
cout << "(2) Constructing base object with ID: " << objID << endl;
}
int main(int argc, char** argv)
{
derivedClass dcObj(1);
return 0;
}