Нет жизнеспособного преобразования из shared_ptr <Pin>в shared_ptr <Component>s - PullRequest
0 голосов
/ 15 марта 2019

У меня есть задание на создание 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'

Я пытался создать новый shated_ptr Компонентов и кучу разных вещей, которые не 'т работа.

1 Ответ

0 голосов
/ 15 марта 2019

Сообщение об ошибке от компилятора ясно.Если вы хотите иметь возможность использовать shared_ptr<Pin>, когда ожидается shared_ptr<Component>, вы должны сделать Pin подклассом Component.С точки зрения абстракции, для меня имеет смысл, что Pin будет подклассом Component.

class Pin : public Component
{
   ...
};
...