제발, 내 코드 좀 봐.map/set iterator는 참조 할 수 없습니다. C++ map
int main() {
Program* allcommand = new Program;
allcommand->addCommand("add", new Add);
allcommand->addCommand("convert", new Convert);
allcommand->addCommand("exit", new Exit);
allcommand->addCommand("help", new Help);
allcommand->addCommand("show", new Show);
allcommand->addCommand("modify", new Modify);
std::string input;
Command* obj;
while (true) {
std::cout << "\nCommand >> ";
std::getline(std::cin, input);
std::map<std::string, Command*> :: iterator it;
std::vector<std::string> parsedinput = allcommand->parse(input);
it = allcommand->getCommands().find(parsedinput[0]);
obj = it->second;
obj->start(parsedinput);
delete obj;
}
return 0;
}
명령 이름과 해당 포인터를 포함하는 맵에 명령을 등록합니다. 이 명령은 문제없이 컴파일되지만 명령을 입력하면 "map/set iterator in dereferencable"과 충돌합니다. 나는지도를 처음 사용하기 때문에 몇 분이면 도움이됩니다.
EDIT. 좋아, 내가 문제가 주요에없는 것을 발견 ... 다음은 프로그램 클래스의 코드 (그 중 일부)
void Program::addCommand(std::string command1, Command* obj) {
m_allCommands[command1] = obj;
}
std::map<std::string, Command*> Program::getCommands() {
return m_allCommands;
}
나는 내가 주에서 명령을 등록한 후, 나는이를 법원 수 없기 때문에 문제가 여기 생각입니다 당신이
if(it == allcommand->getCommands().end()) {
//Not Found
} else {
obj = it->second;
obj->start(parsedinput);
}
시도가 후'it'을 확인하는이'그것은 = allcommand-> getCommands() 발견 (parsedinput [0]) ;'라인. – soon
동일한 문제가 있는데, 그 줄 뒤에있는 모든 것을 제거하고 처음부터 문자열 인 것입니다. – khajvah
'it'가'allcommand-> getCommands(). end()'와 같지 않은지 확인하려고합니다. , 즉 명령이 존재하는지 확인하십시오. 또한 디버거를 사용하여 오류를 throw하는 줄을 찾으십시오. – soon