Создайте конструктор по умолчанию в переполнении стека

Это может быть глупым вопросом, но я не могу найти много информации в Интернете о создании ваших собственных конструкторов по умолчанию в C ++. Кажется, это просто конструктор без параметров. Тем не менее, я попытался создать конструктор по умолчанию следующим образом:

Tree::Tree()  {root = NULL;}

Я также попробовал просто:

Tree::Tree() {}

Когда я пробую любой из них, я получаю сообщение об ошибке:

Ни один экземпляр перегруженной функции «Tree :: Tree» не соответствует указанному типу.

Я не могу понять, что это значит.

Я создаю этот конструктор в моем .cpp файл. Должен ли я делать что-то в моем заголовке (.hа) файл тоже?

7

Решение

Функции-члены (включая конструкторы и деструкторы) должны быть объявлены в определении класса:

class Tree {
public:
Tree(); // default constructor
private:
Node *root;

};

Затем вы можете определить это в вашем .cpp файле:

Tree::Tree() : root(nullptr) {
}

Я бросил в nullptr для C ++ 11. Если у вас нет C ++ 11, используйте root(0),

13

Другие решения

C ++ 11 позволяет вам определить свой собственный конструктор по умолчанию следующим образом:

class A {
public:
A(int);        // Own constructor
A() = default; // C++11 default constructor creation
};

A::A(int){}

int main(){
A a1(1); // Okay since you implemented a specific constructor
A a2();  // Also okay as a default constructor has been created
}
5

Да, вам нужно объявить это в шапке. Например, поместите следующее внутри объявления класса дерева.

class Tree {
// other stuff...
Tree();
// other stuff...
};
4

Недостаточно создать определение для любой функции-члена. Вам также нужно объявлять функция-член. Это также относится к конструкторам:

class Tree {
public:
Tree(); // declaration
...
};

Tree::Tree() // definition
: root(0) {
}

В качестве примечания, вы должны использовать список инициализатора членов, и вы должны не использование NULL, В C ++ 2011 вы хотите использовать nullptr для последнего в C ++ 2003 используют 0,

4
По вопросам рекламы [email protected]