的代碼存在幾個問題
- 時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是抽象的唯一可行的辦法)
你能發佈錯誤由你的編譯器報告? – hmjd
本地是否將字符串映射到AbstractBus或AbstractBus *(指向AbstractBus的指針)? – kbyrd
請發佈'localBusses'的確切聲明。 –