У меня есть 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");
^
Что я делаю не так?
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
уже является адресом).
error: no matching function for call to 'std::pair<std::basic_string<char>, Adapter*>::pair(const string&, Adapter**)
wrapper
вместо &wrapper
при создании pair
?
public
наследование, когда вы получили свои типы?class Device1 : public Adapter