从'shared_ptr <pin>'到'shared_ptr <component> s'没有可行的转换

时间:2019-03-15 05:44:16

标签: c++11 inheritance shared-ptr

我分配了创建Circuit Sim的任务,尝试使用NotGate类时遇到问题。

Components是一个抽象类。

class Component
{
public:
    virtual bool getOutput() = 0;
    virtual void prettyPrint(string padding) = 0;
    virtual void linearPrint() = 0;
};

然后我有Pin和NotGate,它们通过组件的依赖关系继承。

class Pin {
private:
    bool value;
    string label;

public:
    Pin::Pin(string theLabel) {
    label = theLabel;
}
bool Pin::getOutput() {
    return value;
}

void Pin::setValue(bool newVal) {
    this->value = newVal;
}
};



class NotGate {
private:
    shared_ptr<Component> input;
public:
     NotGate::NotGate() {
    input = make_shared<Component>();
}

bool NotGate::getOutput() {
    if (input == 0) {
        return true;
    } else {
        return false;
    }
}

void NotGate::setInput(shared_ptr<Component> in) {
    this->input = in;
}
};

我创建了一个Pin“ c”和一个notGate“ n1”,我想将“ c”作为“ n1”的输入。当我尝试使用以下命令进行操作时:

n1->setInput(c);

它告诉我:No viable conversion from 'shared_ptr<Pin>' to 'shared_ptr<Component>s'

我尝试创建一个新的Components的shated_ptr以及一堆不起作用的东西。

1 个答案:

答案 0 :(得分:0)

来自编译器的错误消息已清除。如果希望在期望shared_ptr<Pin>时能够使用shared_ptr<Component>,则应将Pin设为Component的子类。从抽象的角度来看,我认为PinComponent的子类。

class Pin : public Component
{
   ...
};