繁体   English   中英

“错误:没有匹配的调用函数”构造函数错误

[英]"error: no matching function for call to" constructor errror

我试图构建一个电路模拟器并遇到一些具有继承性的错误。 我想我只是很困惑,因为我盯着它看得太久了,所以希望得到一些帮助。

错误信息:

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

};

请记住,在我为 wire 添加第二个构造函数之前,代码是有效的,它接受一个 bool 和一个 binary_gate。

我推断该错误来自 wire 类中的第二个构造函数。 这让我感到困惑,因为它与第一个构造函数非常相似,我所做的只是传递一个 bool 输入,可以说它应该更容易编码!

谢谢

您的wire类有 4 个成员变量。 这些中的每一个都需要在构建wire过程中构建。

wire(bool &from, binary_gate &to) : bit_output(from), gate_input(to)

提供有关如何构造bit_outputgate_input ,但不说明如何构造bit_inputgate_output 为这些调用默认构造函数。 但是您没有类型为gate_input的默认构造binary_gate

binary_gate类中为binary_gate声明一个公共默认构造函数

binary_gate() = default;

或者

binary_gate() : ...initialization list... {}

如果您希望默认的binary_gate具有其他特定值。

问题是您的wire类的第二个构造函数:

wire(bool &from, binary_gate &to) : bit_output(from), gate_input(to) {
    to.set_next_bit(from); 
}

需要为binary_gate调用默认构造binary_gate ,为gate_output成员...而您还没有提供默认构造函数(即没有参数的构造函数)。 这是因为,一旦您提供具有不同签名的构造函数(如binary_gate(string s) ),编译器就不再提供隐式默认值。 来自cppreference (我的粗体):

如果没有为类类型(结构、类或联合)提供任何类型的用户声明的构造函数,编译器将始终将默认构造函数声明为其类的内联公共成员。

但是, wire类的另一个构造函数使用了gate_inputgate_output复制构造gate_output ,并且编译器确实为此提供了默认值。 同样,来自cppreference

如果没有为类类型(结构、类或联合)提供用户定义的复制构造函数,编译器将始终将复制构造函数声明为其类的非显式内联公共成员。

为了解决这个问题,您需要显式设置一个默认构造函数(不带参数); 最简单的方法如下:

class binary_gate : public logic_element{
    public : 
    binary_gate(string s) : logic_element(s), bitA_status(false), bitB_status(false){}; 
    binary_gate() = default; // Provide an *explicit* default constructor.
    //...

随时要求进一步澄清和/或解释。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM