Карты и полиморфизм

0

У меня есть base class Adapter который extends два класса Device1 и Device2. Я хочу сохранить оба типа объекта на одной карте, поэтому я попробовал это

std::map<std::string, Adapter*> deviceMap;

bool Circuit::add(Adapter *wrapper, std::string &name)
{
    if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)
        return false;

    return true;
}

Где я использую эту функцию следующим образом

Circuit circ;
circ.add(new Device1(*param*), "dv1");

Но я получаю сообщение об ошибке

main.cpp:13: error: no matching function for call to 'Circuit::add(Device1*, const char [4])'
     circ.add(new Device1(*param*), "dv1");
                                                ^

Что я делаю не так?

  • 0
    Использовали ли вы public наследование, когда вы получили свои типы?
  • 0
    да, class Device1 : public Adapter
Теги:
polymorphism
map

1 ответ

3
Лучший ответ
circ.add(new Device1(*param*), "dv1");

пытается связать неконстантную ссылку на временную. Пытаться

bool Circuit::add(Adapter *wrapper, const std::string& name)

Еще одна небольшая проблема в строке

if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)

где &wrapper используется вместо wrapper (wrapper уже является адресом).

  • 0
    это не помогло, я получил error: no matching function for call to 'std::pair<std::basic_string<char>, Adapter*>::pair(const string&, Adapter**)
  • 2
    Разве нам не нужно передавать wrapper вместо &wrapper при создании pair ?
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню