Это может быть глупым вопросом, но я не могу найти много информации в Интернете о создании ваших собственных конструкторов по умолчанию в C ++. Кажется, это просто конструктор без параметров. Тем не менее, я попытался создать конструктор по умолчанию следующим образом:
Tree::Tree() {root = NULL;}
Я также попробовал просто:
Tree::Tree() {}
Когда я пробую любой из них, я получаю сообщение об ошибке:
Ни один экземпляр перегруженной функции «Tree :: Tree» не соответствует указанному типу.
Я не могу понять, что это значит.
Я создаю этот конструктор в моем .cpp
файл. Должен ли я делать что-то в моем заголовке (.h
а) файл тоже?
Функции-члены (включая конструкторы и деструкторы) должны быть объявлены в определении класса:
class Tree {
public:
Tree(); // default constructor
private:
Node *root;
};
Затем вы можете определить это в вашем .cpp файле:
Tree::Tree() : root(nullptr) {
}
Я бросил в nullptr
для C ++ 11. Если у вас нет C ++ 11, используйте root(0)
,
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
}
Да, вам нужно объявить это в шапке. Например, поместите следующее внутри объявления класса дерева.
class Tree {
// other stuff...
Tree();
// other stuff...
};
Недостаточно создать определение для любой функции-члена. Вам также нужно объявлять функция-член. Это также относится к конструкторам:
class Tree {
public:
Tree(); // declaration
...
};
Tree::Tree() // definition
: root(0) {
}
В качестве примечания, вы должны использовать список инициализатора членов, и вы должны не использование NULL
, В C ++ 2011 вы хотите использовать nullptr
для последнего в C ++ 2003 используют 0
,