我已经为我的班级工作了大约一天,我已经完成了几乎所有事情。 我唯一缺少的是删除我的数组并用向量替换它。
#ifndef MENU #define MENU #include <vector> const int MAXCOUNT = 20; struct menuItem { void(*func)(); char decript[50]; }; class Menu { private: //vector <int> v; i tried replacing the "mi"'s in the menu.cpp file with v.push_back but i kept getting pointer errors menuItem mi[MAXCOUNT]; int count = 0; void runSelection(); public: Menu(); void addMenu(char *Description, void(*f)()); void runMenu(); void waitKey(); }; #endif这是cpp文件。 我试图用v替换数组mi。我知道我错过了一些东西,但我无法解决它,所以我只是发布它使用数组。
Menu::Menu() :count(0) { } void Menu::addMenu(char *Description, void(*f)()) { if (count < MAXCOUNT) { this->mi[count].func = f; strcpy(this->mi[count].decript, Description); count++; } } void Menu::runMenu() { for (;;) { system("CLS"); for (int i = 0; i < count; i++) { cout << this->mi[i].decript << endl; } runSelection(); } } void Menu::waitKey() { cout << "Press any key to continue" << endl; while (!_kbhit()); fflush(stdin); } void Menu::runSelection() { int select; cin >> select; if (select <= count) this->mi[select - 1].func(); }I've been working on this assignment for my class for about a day and I've completed just about everything. The only thing I'm missing is removing my array and replacing it with a vector.
#ifndef MENU #define MENU #include <vector> const int MAXCOUNT = 20; struct menuItem { void(*func)(); char decript[50]; }; class Menu { private: //vector <int> v; i tried replacing the "mi"'s in the menu.cpp file with v.push_back but i kept getting pointer errors menuItem mi[MAXCOUNT]; int count = 0; void runSelection(); public: Menu(); void addMenu(char *Description, void(*f)()); void runMenu(); void waitKey(); }; #endifThis is the cpp file. Im trying to replace the array mi with v. I know im missing something but I can't figure it out so I'm just posting it working with an array.
Menu::Menu() :count(0) { } void Menu::addMenu(char *Description, void(*f)()) { if (count < MAXCOUNT) { this->mi[count].func = f; strcpy(this->mi[count].decript, Description); count++; } } void Menu::runMenu() { for (;;) { system("CLS"); for (int i = 0; i < count; i++) { cout << this->mi[i].decript << endl; } runSelection(); } } void Menu::waitKey() { cout << "Press any key to continue" << endl; while (!_kbhit()); fflush(stdin); } void Menu::runSelection() { int select; cin >> select; if (select <= count) this->mi[select - 1].func(); }最满意答案
最简单的方法应该是更换
menuItem mi[MAXCOUNT];同
std::vector<menuItem> mi;并在您的构造函数中正确初始化它
Menu::Menu() :count(0) ,mi(MAXCOUNT) { }假设你之前有工作代码,这应该无缝地替换原始数组。
使用当前的c ++标准,您甚至可以简单地使用
std::array<menuItem,MAXCOUNT> mi;这甚至不需要在构造函数中初始化。
The simplest way should be to replace
menuItem mi[MAXCOUNT];with
std::vector<menuItem> mi;and initialize it in your constructor properly
Menu::Menu() :count(0) ,mi(MAXCOUNT) { }Supposed you had working code before, this should replace the raw array seamlessly.
With the current c++ standard you can even simply use
std::array<menuItem,MAXCOUNT> mi;this wouldn't even require initialization in the constructor.
更多推荐
发布评论