我需要关于班级建设的帮助.在我的课程中,我使用了复制构造函数和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)
这是我得到错误的地方.我提供了复制构造函数声明,所以它们应该不是问题.
我很感激任何帮助.提前致谢.
创建网表时,您没有将任何参数传递给构造函数,这意味着您正在调用默认构造函数.但是,您没有定义默认构造函数.您只创建了一个构造函数,它将不同的网表作为参数(复制构造函数):
netlist(const netlist &);
Run Code Online (Sandbox Code Playgroud)
您应该定义一个默认构造函数,如下所示:
netlist();
Run Code Online (Sandbox Code Playgroud)
请注意,如果您没有定义任何构造函数,编译器会添加默认构造函数,但是由于您添加了复制构造函数,因此您必须自己定义所有构造函数.
代码有两个问题 -
"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)