C++ &引用;错误:没有匹配的函数用于调用";构造函数错误
我正试图构造一个电路模拟器,但遇到了一些固有的错误。我想我只是感到困惑,因为我已经盯着它看了太久了,所以我希望能得到一些帮助 错误消息:C++ &引用;错误:没有匹配的函数用于调用";构造函数错误,c++,class,oop,constructor,circuit,C++,Class,Oop,Constructor,Circuit,我正试图构造一个电路模拟器,但遇到了一些固有的错误。我想我只是感到困惑,因为我已经盯着它看了太久了,所以我希望能得到一些帮助 错误消息: prep_3.cpp: In constructor 'wire::wire(bool&, binary_gate&)': prep_3.cpp:147:70: error: no matching function for call to 'binary_gate::binary_gate()' wire(bool &from,
prep_3.cpp: In constructor 'wire::wire(bool&, binary_gate&)':
prep_3.cpp:147:70: error: no matching function for call to 'binary_gate::binary_gate()'
wire(bool &from, binary_gate &to) : bit_output(from), gate_input(to) {
^
导致问题的类:
class wire{
public :
wire(binary_gate &from, binary_gate &to) : gate_output(from), gate_input(to) {
//want to pass output of from into to.
//therefore must set_next_bit of to taking the input as the output of from
to.set_next_bit(from.get_output());
}
wire(bool &from, binary_gate &to) : bit_output(from), gate_input(to) {
to.set_next_bit(from);
}
private :
binary_gate gate_output, gate_input;
bool bit_output, bit_input;
};
二进制门类:
class binary_gate : public logic_element{
public :
binary_gate(string s) : logic_element(s), bitA_status(false), bitB_status(false){};
bool get_bitA(){
if(!bitA_status){
cout << "A hasn't been assigned yet! please set it : " ;
cin >> bitA;
bitA_status = true;
}
return bitA;
}
bool get_bitB(){
if(!bitB_status){
cout << "B hasn't been assigned yet! please set it : " ;
cin >> bitB;
bitB_status = true;
}
return bitB;
}
void set_bitA(bool val){
bitA = val;
bitA_status = true;
}
void set_bitB(bool val){
bitB = val;
bitB_status = true;
}
bool get_statusA(){
return bitA_status;
}
bool get_statusB(){
return bitB_status;
}
virtual void set_next_bit(bool from_bit){
if(!bitA_status){
bitA = from_bit;
this->bitA_status = true;
}
else if(!bitB_status){
bitB = from_bit;
this->bitB_status = true;
}
}
protected:
bool bitA;
bool bitB;
bool bitA_status; // true = taken, false = empty
bool bitB_status; // true = taken, false = empty
};
类二进制门:公共逻辑元素{
公众:
二进制_门(字符串s):逻辑_元素、位a_状态(false)、位b_状态(false){};
bool get_bitA(){
如果(!bitA_状态){
cout>bitA;
比特状态=真;
}
返回bitA;
}
bool get_bitB(){
如果(!bitB_状态){
cout>bitB;
bitB_状态=真;
}
返回bitB;
}
无效集合(布尔值){
bitA=val;
比特状态=真;
}
无效集\u位(布尔值){
bitB=val;
bitB_状态=真;
}
bool get_statusA(){
返回bitA_状态;
}
bool get_statusB(){
返回bitB_状态;
}
虚拟空集\u下一个\u位(bool from \u位){
如果(!bitA_状态){
bitA=从_位开始;
此->比特状态=真;
}
如果(!bitB_状态){
bitB=从_位开始;
此->比特状态=真;
}
}
受保护的:
布尔比塔;
布尔比特;
bool bitA_status;//true=take,false=empty
bool bitB_status;//true=take,false=empty
};
请记住,在我为wire添加第二个构造函数之前,代码是有效的,它接受bool和二进制门
我推断错误来自wire类中的第二个构造函数。这让我很困惑,因为它与第一个构造函数非常相似,我所做的只是传递一个bool输入,可以说它应该更易于编码
谢谢您的
wire
类有4个成员变量。每一个都需要在导线的构建过程中构建
wire(bool &from, binary_gate &to) : bit_output(from), gate_input(to)
说明如何构造位输出
和门输入
,而不是位输入
和门输出
。为这些函数调用默认构造函数。但是对于gate\u-input
类型的binary\u-gate
没有默认构造函数
在二进制门
类中为二进制门
声明公共默认构造函数
binary_gate() = default;
或
如果希望默认的二进制门
具有其他特定值。问题在于wire
类的第二个构造函数:
wire(bool&from,二进制门&to):位输出(from),门输入(to){
设置下一位(从);
}
需要为二进制门
调用默认构造函数,为门输出
成员调用默认构造函数。。。而且您还没有提供默认构造函数(即没有参数的构造函数)。这是因为,一旦为构造函数提供了不同的签名(如二进制门(字符串s)
),编译器就不再提供隐式默认值。来自(我的):
如果没有为类类型(struct、class或union)提供任何类型的用户声明构造函数,编译器将始终声明
默认构造函数作为其类的内联公共成员
但是,wire
类的另一个构造函数对gate\u输入
和gate\u输出
都使用复制构造函数,编译器确实为此提供了默认值。同样,来自:
如果没有为类类型提供用户定义的副本构造函数
(结构、类或联合),编译器将始终声明一个副本
构造函数作为其类的非显式内联公共成员
为了解决这个问题,您需要显式地设置一个默认构造函数(没有参数);最简单的方法如下:
类二进制门:公共逻辑元素{
公众:
二进制_门(字符串s):逻辑_元素、位a_状态(false)、位b_状态(false){};
binary_gate()=default;//提供一个*显式*默认构造函数。
//...
请随时要求进一步澄清和/或解释。感谢您的快速回复。原来我不知道复制构造函数是什么,所以我想我真正的困惑应该是为什么第一个构造函数可以工作!您的回复澄清了很多问题。再次感谢。
binary_gate() : ...initialization list... {}