我为作业创建了一个简单的“菜单”,列出了可以选择调用函数的编号选项。
标题文件:
<script>
function myFunc()
{
return false;
}
</script>
一切都运行正常,直到我试图在数据部分中交换出menuItems数组,这样它就是一个menuItems的向量,突然间它不起作用。它似乎停在我的addMenu函数中:
#ifndef MENU
#define MENU
#include <string>
#include <vector>
const int MAXCOUNT = 20;
struct menuItem
{
void(*func) ();
string descript;
};
class Menu
{
private:
//menuItem mi[MAXCOUNT];
vector<menuItem> mi;
int count;
void runSelection();
public:
Menu();
void addMenu(char *Description, void (*f) ());
void runMenu();
void waitKey();
};
#endif
但是我不明白改变了什么?
答案 0 :(得分:3)
我猜这是你的问题
Menu() {
mi.resize(MAXCOUNT); // you don't have this.
}
Menu() : mi(MAXCOUNT) { // or this
}
vector<menuItem> mi { MAXCOUNT} ; // and clearly not this
因此
if(count < MAXCOUNT)
{
mi[count].func = f; // this is not valid because mi has a size of 0
count ++;
}
这是修复问题的方法(不再需要计数成员):
if (mi.size() < MAXCOUNT)
mi.push_back({f, Description}); // this would be a fix.
或者如前所述调整矢量大小。
答案 1 :(得分:0)
问题是您正在尝试访问向量中尚未创建的元素。 std::vector
开始为空,您通常会逐个将新元素添加到向量的末尾,每次都会增加其大小。
相反:
class Menu
{
private:
vector<menuItem> mi;
// int count; // no need for this, use mi.size()
void runSelection();
public:
Menu();
void addMenu(char *Description, void (*f) ());
void runMenu();
void waitKey();
};
void Menu::addMenu(char *Description, void (*f) (void))
{
menuItem item = {f, Description};
mi.push_back(item); // add the new element to the end (back)
}