默认构造函数C++错误

Sis*_*sta 2 c++ constructor

我需要关于班级建设的帮助.在我的课程中,我使用了复制构造函数和operator =来阻止编译器创建它们.在我的主程序中,当我尝试创建类的实例时,我收到一条错误,上面写着"该类没有默认的构造函数".

可能是什么问题呢?

这是我的代码片段.

class netlist {
    netlist(const netlist &);
    netlist &operator=(const netlist &);
    std::map<std::string, net *> nets_;
}; // class netlist
Run Code Online (Sandbox Code Playgroud)

在我使用的主要功能中:

netlist nl;
Run Code Online (Sandbox Code Playgroud)

这是我得到错误的地方.我提供了复制构造函数声明,所以它们应该不是问题.

我很感激任何帮助.提前致谢.

fli*_*ght 6

创建网表时,您没有将任何参数传递给构造函数,这意味着您正在调用默认构造函数.但是,您没有定义默认构造函数.您只创建了一个构造函数,它将不同的网表作为参数(复制构造函数):

netlist(const netlist &);
Run Code Online (Sandbox Code Playgroud)

您应该定义一个默认构造函数,如下所示:

netlist();
Run Code Online (Sandbox Code Playgroud)

请注意,如果您没有定义任何构造函数,编译器会添加默认构造函数,但是由于您添加了复制构造函数,因此您必须自己定义所有构造函数.

  • @Cameron只有在定义_no_构造函数时才会这样做.如果定义任何类型的构造函数,编译器将不会自动创建默认构造函数. (2认同)

Mah*_*esh 6

代码有两个问题 -

  1. 默认情况下,类成员是私有的.
  2. "I get an error saying "No default constructor exists for the class" ".

因为如果提供任何类型的构造函数作为类声明的一部分(netlist在这种情况下类具有复制构造函数),编译器不提供默认构造函数(即,没有参数的构造函数).

netlist nl;  // And this invokes call to the default constructor and so
             // the error
Run Code Online (Sandbox Code Playgroud)

netlist.h

class netlist {

public: // Added
    netlist(); // This just a declaration. Should provide the definition.
    netlist(const netlist &);
    netlist &operator=(const netlist &);
    std::map<std::string, net *> nets_;
}; // class netlist
Run Code Online (Sandbox Code Playgroud)

netlist.cpp

netlist::netlist()
{
       // .....
}

// Other definitions
Run Code Online (Sandbox Code Playgroud)