C++ 映射与多态性
我有一个C++ 映射与多态性,c++,map,polymorphism,C++,Map,Polymorphism,我有一个基类适配器,它扩展了两个类设备1和设备2。我想将这两种类型的对象存储在同一个贴图中,所以我尝试了这个方法 std::map<std::string, Adapter*> deviceMap; bool Circuit::add(Adapter *wrapper, std::string &name) { if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)
基类适配器
,它扩展了两个类设备1
和设备2
。我想将这两种类型的对象存储在同一个贴图中,所以我尝试了这个方法
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;
}
但我收到一条错误消息说
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)
if(deviceMap.insert(std::pair(name,&wrapper)).second==false)
其中使用了包装器而不是包装器(包装器已经是地址)
尝试将非常量引用绑定到临时引用。试一试
bool Circuit::add(Adapter *wrapper, const std::string& name)
另一个小问题即将出现
if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)
if(deviceMap.insert(std::pair(name,&wrapper)).second==false)
其中使用了包装器而不是包装器(包装器已经是地址)
尝试将非常量引用绑定到临时引用。试一试
bool Circuit::add(Adapter *wrapper, const std::string& name)
另一个小问题即将出现
if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)
if(deviceMap.insert(std::pair(name,&wrapper)).second==false)
其中使用了包装器而不是包装器(包装器已经是地址)
尝试将非常量引用绑定到临时引用。试一试
bool Circuit::add(Adapter *wrapper, const std::string& name)
另一个小问题即将出现
if(deviceMap.insert(std::pair<std::string, Adapter*>(name, &wrapper)).second == false)
if(deviceMap.insert(std::pair(name,&wrapper)).second==false)
其中使用了&wrapper
而不是wrapper
(wrapper
已经是地址)。派生类型时是否使用了公共
继承?是的,类设备1:public Adapter
派生类型时是否使用了公共
继承?是的,class Device1:public Adapter
在派生类型时是否使用了public
继承?是的,class Device1:public Adapter
在派生类型时是否使用了public
继承?是的,class Device1:public Adapter
没有帮助,我得到了错误:没有匹配函数来调用'std::pair::pair(const string&,Adapter**)
当我们创建pair
时,我们不需要传递wrapper
而不是&wrapper
?也许你是对的,但是我不应该传递地址吗?当你这样做时,Type*ptr=&obj
wrapper
已经是地址了:bool Circuit::add(Adapter*wrapper,std::string&name)
没有帮助,我得到了错误:调用'std::pair::pair(const string&,Adapter**)没有匹配的函数
当我们创建对时,我们不需要传递wrapper
而不是&wrapper
吗?也许你是对的,但我不应该传递地址,就像你这样做Type*ptr=&obj
wrapper
已经是地址:bool Circuit::add(适配器*wrapper,std::string&name)
这没有帮助,我得到了错误:调用'std::pair::pair(const string&,Adapter**)时没有匹配的函数。
当我们创建对时,我们不需要传递包装程序而不是包装程序吗,但是我不应该传递地址吗?当你这样做时,Type*ptr=&obj
wrapper
已经是地址了:bool Circuit::add(Adapter*wrapper,std::string&name)
没有帮助,我得到了错误:调用'std::pair::pair(const string&,Adapter**)没有匹配的函数
当我们创建对时,我们不需要传递包装器而不是&wrapper
吗?也许你是对的,但是我不应该像这样传递地址吗Type*ptr=&obj
包装器
已经是地址了:bool-Circuit::add(适配器*wrapper,std::string&name)