在C+中创建默认构造函数+; 这可能是个愚蠢的问题,但是我在网上找不到很多关于在C++中创建自己的默认构造函数的信息。它似乎只是一个没有参数的构造函数。但是,我尝试创建默认构造函数,如下所示: Tree::Tree() {root = NULL;} 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 }

在C+中创建默认构造函数+; 这可能是个愚蠢的问题,但是我在网上找不到很多关于在C++中创建自己的默认构造函数的信息。它似乎只是一个没有参数的构造函数。但是,我尝试创建默认构造函数,如下所示: Tree::Tree() {root = NULL;} 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 },c++,default-constructor,C++,Default Constructor,我还试过: Tree::Tree() {} 当我尝试这两种方法时,我得到了错误: 重载函数“Tree::Tree”的任何实例都与指定的类型不匹配 我似乎不明白这意味着什么 我正在.cpp文件中创建此构造函数。我是否也应该在头文件(.h)中执行某些操作?是的,您需要在头文件中声明它。例如,将以下内容放在树类的声明中 class Tree { // other stuff... Tree(); // other stuff... }; 成员函数(包括构造函数和析构函数)必

我还试过:

Tree::Tree() {}
当我尝试这两种方法时,我得到了错误:

重载函数“Tree::Tree”的任何实例都与指定的类型不匹配

我似乎不明白这意味着什么


我正在
.cpp
文件中创建此构造函数。我是否也应该在头文件(
.h
)中执行某些操作?

是的,您需要在头文件中声明它。例如,将以下内容放在树类的声明中

class Tree {
    // other stuff...
    Tree();
    // other stuff...
};
成员函数(包括构造函数和析构函数)必须在类定义中声明:

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

};
然后可以在.cpp文件中定义它:

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

我为C++11添加了
nullptr
。如果没有C++11,请使用
root(0)

为任何成员函数创建定义是不够的。您还需要声明成员函数。这也适用于施工人员:

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

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

作为旁注,您应该使用成员初始值设定项列表,而不应该使用
NULL
。在C++ 2011中,你想使用<代码> null ptr>代码>,在C++ 2003中使用<代码> 0 < /C> > .< P> <强> C++ 11 >强>允许你定义你自己的默认构造函数,例如:

Tree::Tree()  {root = NULL;}
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
}

谢谢我知道是这样的。我想我需要学习更多关于头文件的知识。谢谢!这是我的想法,但不知道如何申报。谢谢!我以前读过类定义,但不知道这意味着什么,所以我可能忽略了它。现在它更有意义了。每个类都必须有一个定义。该定义列出了类的成员函数和成员数据。无论在何处使用该类,代码都必须查看该类的定义。因此,类定义几乎总是放在头文件中,可以包含在使用该类的任何源文件中。在定义成员函数的源文件中,还包括头文件,然后写入函数定义。