我有一个这样定义的类:
initializer_list<string> choices;
initializer_list<string>::iterator current_choice;
bool has_choices = false;
MenuItem(Position position, string prompt) { this->position = position; this->prompt = prompt; }
MenuItem(Position position, string prompt, initializer_list<string> choices) : MenuItem(position, prompt) {
this->choices = choices;
this->current_choice = this->choices.begin();
this->text = *(this->current_choice);
this->has_choices = true;
}
当前菜单项定义为 MenuItem* current_menu_item = &menuItems[menuItemIndex];
当我在构造函数中迭代 initializer_list 时,会输出正确的值。但是稍后在代码中当我尝试切换值时,如下所示:
if (c == KEY_RIGHT) {
if (current_menu_item->has_choices)
{
if (current_menu_item->current_choice != current_menu_item->choices.end()) {
current_menu_item->current_choice++;
current_menu_item->text = *(current_menu_item->current_choice);
}
}
}
它显示了下一个菜单项对象的 initializer_list 的第一个值,我按右,然后崩溃。如果选择了下一个对象,并且我按右,它就会崩溃。
像这样将对象放入向量中
menuItems.push_back(MenuItem(Position(5, 15), "Religion: ", { "*", "*", "*", "Protestant" }));
menuItems.push_back(MenuItem(Position(30, 5), "Do you smoke? ", { "Yes", "No" }));
我已经尝试在整个代码的各个点进行调试,但我似乎无法确定它出错的位置或原因。
没关系,有两个人指出我应该使用常规容器而不是 initializer_list。谢谢大家的回答。我现在觉得很笨。我所要做的就是将 initializer_list 更改为向量,而无需更改任何其他代码。我喜欢 C++。