С++ компиляция ошибки, связанной с определением конструктора/деструктора
Я пытаюсь определить конструктор и деструктор моего класса, но я продолжаю получать ошибку:
определение неявно объявленного "x:: x()"
Что это значит?
Часть кода:
///Constructor
StackInt::StackInt(){
t = (-1);
stackArray = new int[20];
};
///Destructor
StackInt::~StackInt(){
delete[] stackArray;
}
Ответы
Ответ 1
В объявлении класса (вероятно, в файле заголовка) вам нужно иметь что-то похожее:
class StackInt {
public:
StackInt();
~StackInt();
}
Чтобы компилятор знал, что вам не нужны версии, созданные с помощью компилятора по умолчанию (с тех пор, как вы их предоставили).
Вероятно, для объявления будет больше, чем это, но вам понадобятся хотя бы те - и это поможет вам начать.
Вы можете увидеть это, используя очень простое:
class X {
public: X(); // <- remove this.
};
X::X() {};
int main (void) { X x ; return 0; }
Скомпилируйте это и оно работает. Затем удалите строку с маркером комментария и снова скомпилируйте. Появятся ваши проблемы:
class X {};
X::X() {};
int main (void) { X x ; return 0; }
qq.cpp:2: error: definition of implicitly-declared `X::X()'
Ответ 2
Еще одна вещь, которую следует иметь в виду, - это то, что все, что должен делать конструктор, должно быть общедоступным. Я получил эту ошибку раньше.
class X{
T *data;
public: // <-move this to include T *
X();
~X();
}
Этот код по-прежнему имеет ошибку, потому что в моем конструкторе у меня было следующее:
X::X(){data = new T();
Это означало, что, хотя я сделал конструктор и деструктор общедоступными, данные, с которыми они работали, по-прежнему были частными, и я до сих пор получил "определение неявно объявленной" ошибки.