请看一下我的代码。
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 not dereferencable”而崩溃。我是地图新手(几分钟),所以请帮忙。
编辑。好的,我发现问题不在主要...这是程序类的代码(其中一些)
void Program::addCommand(std::string command1, Command* obj) {
m_allCommands[command1] = obj;
}
std::map<std::string, Command*> Program::getCommands () {
return m_allCommands;
}
我认为问题出在这里,因为在我在 main 中注册命令后,我无法找到任何命令的名称(同样的问题)