我分配了创建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以及一堆不起作用的东西。
答案 0 :(得分:0)
来自编译器的错误消息已清除。如果希望在期望shared_ptr<Pin>
时能够使用shared_ptr<Component>
,则应将Pin
设为Component
的子类。从抽象的角度来看,我认为Pin
是Component
的子类。
class Pin : public Component
{
...
};