use*_*239 7 c++ default-constructor
这可能是一个愚蠢的问题,但我在网上找不到很多关于在C++中创建自己的默认构造函数的信息.它似乎只是一个没有参数的构造函数.但是,我试图像这样创建我的默认构造函数:
Tree::Tree() {root = NULL;}
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
Tree::Tree() {}
Run Code Online (Sandbox Code Playgroud)
当我尝试其中任何一个时,我收到错误:
没有重载函数"Tree :: Tree"的实例与指定的类型匹配.
我似乎无法弄清楚这意味着什么.
我在我的.cpp文件中创建这个构造函数.我也应该在我的header(.h)文件中做些什么吗?
Pet*_*ker 13
必须在类定义中声明成员函数(包括构造函数和析构函数):
class Tree {
public:
Tree(); // default constructor
private:
Node *root;
};
Run Code Online (Sandbox Code Playgroud)
然后,您可以在.cpp文件中定义它:
Tree::Tree() : root(nullptr) {
}
Run Code Online (Sandbox Code Playgroud)
我投入了nullptrfor 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
}
Run Code Online (Sandbox Code Playgroud)
为任何成员函数创建定义是不够的。您还需要声明成员函数。这也适用于构造函数:
class Tree {
public:
Tree(); // declaration
...
};
Tree::Tree() // definition
: root(0) {
}
Run Code Online (Sandbox Code Playgroud)
作为旁注,您应该使用成员初始值设定项列表,而不应该使用NULL. 在 C++ 2011 中你想使用nullptr后者,在 C++ 2003 中使用0.
是的,您需要在标头中声明它。例如,将以下内容放在树类的声明中。
class Tree {
// other stuff...
Tree();
// other stuff...
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25016 次 |
| 最近记录: |