請看看我的代碼。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;
}
它向包含其命令名稱和指向其類的映射註冊命令。 這個編譯沒有問題,但當我輸入一個命令,它崩潰與「地圖/設置迭代器不可取消」。我是新來的地圖(幾分鐘),所以請幫助。
編輯。好吧,我發現這個問題是不是在主...這裏是程序類的代碼(有些)
void Program::addCommand(std::string command1, Command* obj) {
m_allCommands[command1] = obj;
}
std::map<std::string, Command*> Program::getCommands() {
return m_allCommands;
}
我覺得問題就在這裏,因爲在我註冊主的命令,我不能清點了任何命令(同樣的問題)
嘗試之後檢查'it'此'它= allcommand-> getCommands()找到(parsedinput [0]) ;'線。 – soon
同樣的問題,當我刪除該行後的所有內容,並試圖cout它 - >第一,這是字符串 – khajvah
我的意思是,嘗試檢查它是否與'allcommand-> getCommands()即檢查命令是否存在。也嘗試使用調試器並找到引發錯誤的行。 – soon