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)