C++ 将抽象类对象从映射存储到抽象类引用

C++ 将抽象类对象从映射存储到抽象类引用,c++,map,abstract-class,C++,Map,Abstract Class,我试图实现以下方法,以获取与其名称对应的总线,该名称作为字符串传递给该方法。这里AbstractBus是一个包含总线功能的抽象类。localBusses是一个std::map void getLocalBusByName(string& name, AbstractBus& bus) { bus = localBusses.find(name)->second; } 但是,我得到一个错误“no operator”=“匹配这些操作数” 有人能解释一下这里的错误以

我试图实现以下方法,以获取与其名称对应的总线,该名称作为字符串传递给该方法。这里AbstractBus是一个包含总线功能的抽象类。localBusses是一个std::map

void getLocalBusByName(string& name, AbstractBus& bus) 
{
    bus =  localBusses.find(name)->second;
}
但是,我得到一个错误“no operator”=“匹配这些操作数”
有人能解释一下这里的错误以及我如何纠正它吗?

代码提出了几个问题

  • 它不处理localBusses.find(…)找不到总线的情况
  • 您似乎希望返回对找到的总线的引用。您应该记住,引用是别名,它们只能在声明时绑定,并在声明后保持不变。也就是说,不能将引用重新绑定到另一个对象
  • 在2之后,总线=。。。尝试调用赋值运算符将找到的总线分配给引用引用的总线。赋值运算符不存在或不可访问。这是好的,因为在这种上下文中使用赋值操作符是个坏主意,如果存在,如果AbstractBus类是可实例化的(非抽象的),则可能会导致切片
  • 编辑:我相信你有:

    typedef std::map<string, AbstractBus*> tBussesMap;
    tBussesMap localBusses;
    

    如果假设localBusses的类型为:
    std::map
    (如果AbstractBus是抽象的,那么这是唯一可行的方法)

    代码会出现几个问题

  • 它不处理localBusses.find(…)找不到总线的情况
  • 您似乎希望返回对找到的总线的引用。您应该记住,引用是别名,它们只能在声明时绑定,并在声明后保持不变。也就是说,不能将引用重新绑定到另一个对象
  • 在2之后,总线=。。。尝试调用赋值运算符将找到的总线分配给引用引用的总线。赋值运算符不存在或不可访问。这是好的,因为在这种上下文中使用赋值操作符是个坏主意,如果存在,如果AbstractBus类是可实例化的(非抽象的),则可能会导致切片
  • 编辑:我相信你有:

    typedef std::map<string, AbstractBus*> tBussesMap;
    tBussesMap localBusses;
    

    假设localBusses的类型为:
    std::map
    (如果AbstractBus是抽象的,唯一可行的方法)

    您是否可以发布编译器报告的错误?localBusses是字符串到AbstractBus还是AbstractBus*(指向AbstractBus的指针)的映射?请张贴
    localBusses
    的确切声明。您可以张贴AbstractBus的声明吗?如果它有任何纯虚拟函数,则不应编译
    std::map
    。@sufyansiddique不是哪一个更好,而是哪一个是可行的,第二个不应编译。是否可以按照编译器报告的那样发布错误?Localbuses是字符串到AbstractBus还是AbstractBus*(指向AbstractBus的指针)的映射?请张贴
    localBusses
    的确切声明。您可以张贴AbstractBus的声明吗?如果这有任何纯虚函数,那么
    std::map
    不应该编译。@sufyansiddique不是哪个更好,而是什么可行,第二个不应该编译。@sufyansiddique你是wellcomed@sufyan西迪克,你很好