코드가 제시 몇 가지 문제
- localBusses.find (...) 아무튼 # t는
- 당신은 발견에 대한 참조를 반환 할 것 버스를 찾을 때이 사건을 처리하지 않습니다 버스. 참조는 별칭이며 선언 된 경우에만 바인딩 할 수 있으며 이후에는 변경할 수 없음을 기억해야합니다. 즉, 다른 오브젝트에 대한 참조를 다시 바인드 할 수 없습니다.
- 2 다음에, bus = ...는 할당 연산자를 호출하여 찾은 버스를 참조에 의해 참조 된 버스에 지정하려고 시도합니다. 할당 연산자가 없거나 액세스 할 수 없습니다. 이 문맥에서 할당 연산자를 사용하는 것은 좋지 않은 아이디어이며, AbstractBus 클래스가 인스턴스화 (비 - 추상화) 될 경우 아마 슬라이스로 이어질 것입니다.
편집 :
typedef std::map<string, AbstractBus*> tBussesMap;
tBussesMap localBusses;
또는 AbstractBus은 어느 경우
나는 그러나 가정 (그 이름에도 불구하고) (모든 순수 방법을 포함하지 않는) 정말 추상적되지 않습니다 : 난 당신이 중 하나가 믿습니다 AbstractBus에서 파생 된 클래스가 있습니다. 그리고 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 추상적 경우에만 가능한 방법)
가 오류를 게시 할 수
그래서 당신의 라인 getLocalBusByName 방법을 작성해야 귀하의 컴파일러에 의해보고 된대로? – hmjd
localBusses는 AbstractBus 또는 AbstractBus * (AbstractBus에 대한 포인터)에 대한 문자열 맵입니까? – kbyrd
'localBusses'의 정확한 선언을 게시하십시오. –