将抽象类对象从映射存储到抽象类参考
我想实现以下方法来获取与其名称相对应的总线,该名称作为字符串传递给方法。这里AbstractBus是一个包含总线功能的抽象类。 localBusses是一个std ::地图将抽象类对象从映射存储到抽象类参考
void getLocalBusByName(string& name, AbstractBus& bus)
{
bus = localBusses.find(name)->second;
}
不过,我得到一个错误“没有运营商‘=’这些操作数相匹配” 谁能解释什么是错在这里,我该如何纠正呢?
的代码存在几个问题
- 时localBusses.find(...)没有按#找不到总线
- 你似乎想参考返回发现它不处理的情况下总线。你应该记住,引用是别名,它们只能在声明时绑定,并在之后保持不变。也就是说,您不能重新绑定对另一个对象的引用
- 在2之后,总线= ...尝试呼叫赋值运算符以将找到的总线分配给引用引用的总线。赋值运算符不存在或不可访问。这很好,因为在这种情况下有一个赋值运算符是一个坏主意,如果存在的话,如果AbstractBus类可以实例化(非抽象的),它可能会导致切片。
编辑:我相信你要么有:
typedef std::map<string, AbstractBus*> tBussesMap;
tBussesMap localBusses;
或AbstractBus是不是真的抽象的(不包含任何纯方法)(尽管它的名字),但是
在这两种情况下,我认为你有从AbstractBus派生的类。并且getLocalBusByName必须提供没有找到总线的情况,并避免无意切割。
所以,你应该写getLocalBusByName方法中的台词:这里localBusses被假定为类型的
AbstractBus*
getLocalBusByName(const string& name)
{
tBussesMap::iterator it = localBusses.find(name);
if (it != localBusses.end())
{
return it->second;
}
return nullptr;
}
:std::map<string, AbstractBus*>
(如果AbstractBus是抽象的唯一可行的办法)
非常感谢您的帮助 –
@sufyan siddique您好! – ds27680
你能发布错误由你的编译器报告? – hmjd
本地是否将字符串映射到AbstractBus或AbstractBus *(指向AbstractBus的指针)? – kbyrd
请发布'localBusses'的确切声明。 –