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

С++ компиляция ошибки, связанной с определением конструктора/деструктора

Я пытаюсь определить конструктор и деструктор моего класса, но я продолжаю получать ошибку:

определение неявно объявленного "x:: x()"

Что это значит?

Часть кода:

///Constructor
StackInt::StackInt(){
    t = (-1);
    stackArray = new int[20];
};

///Destructor
StackInt::~StackInt(){
    delete[] stackArray;
}
4b9b3361

Ответ 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();

Это означало, что, хотя я сделал конструктор и деструктор общедоступными, данные, с которыми они работали, по-прежнему были частными, и я до сих пор получил "определение неявно объявленной" ошибки.