私のコードを見てください。
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」でクラッシュします。私は地図が初めてです(数分)ので、助けてください。
編集。OK、問題はメインではないことがわかりました...これがProgramクラスのコードです(一部)
void Program::addCommand(std::string command1, Command* obj) {
m_allCommands[command1] = obj;
}
std::map<std::string, Command*> Program::getCommands () {
return m_allCommands;
}
メインにコマンドを登録した後、コマンドの名前を数えることができないため、問題はここにあると思います(同じ問題)