这是我为大学课程所做的一个项目,我无法找到适合我的任何答案。我很可能不理解答案。
我有一个struct(menuItem),并且该结构被放入一个类(Menu)中。我之前在类Menu中成功创建了一个struct menuItem数组,但是当我尝试在Menu中创建一个menuItem向量时,我尝试初始化它的大小时会出现此错误
错误C2059:语法错误:'常量'
这是有问题的代码:
#include <vector>
using namespace std;
//previous array value
const int MAXCOUNT = 20;
struct menuItem
{
void(*func)();
char description[50];
};
class Menu
{
private:
std::vector<menuItem> mi(20); // <<< "The error occurs when I set the vector to a size of 20"
int count;
void runSelection();
};
当我将矢量初始化为无大小时,这个错误没有发生,但是它再次弹出第二次我以这个上下文错误的形式使用mi.resize(20);
:&#34;错误,这个减速没有存储类或类型说明符&#34;,这没有任何意义,因为我根据我认为向量初始化的方式将向量mi
的类型设置为类型menuItem
。
我假设我以某种方式初始化向量错误,或者我设置结构错误。我找到了#34;答案&#34;声明结构是没有我知道的私有部分的类,并且你必须有一个构造函数来初始化结构的向量,我不知道。问题是,没有我提出的构造函数已经使错误消失了。我完全迷失了,并希望得到一些帮助。
答案 0 :(得分:1)
对于类成员,您不会在声明它们的地方初始化它们(因为成员列表就是:类型和名称的列表),而是在构造函数的成员初始化列表中< / em>的
像这样:
class Menu
{
std::vector<menuItem> mi; // no initialiser here
Menu() : mi(20) {}; // but in the ctor-initializer instead
};
答案 1 :(得分:1)
你可以在C ++ 11中这样做
class Menu
{
private:
std::vector<menuItem> mi = std::vector<menuItem>(20);
};
或者如果你使用C ++ 03,你需要在构造函数初始化列表中初始化它
class Menu
{
public:
Menu() : mi(20) {}
private:
std::vector<menuItem> mi;
};
答案 2 :(得分:0)
您尝试将参数传递给非静态类成员的构造函数作为声明的一部分,这是错误的。
基本上,您必须在声明中声明数据成员,如下所示:
std::vector<menuitem> mi;
并且作为构造函数的一部分,如果有必要,调用适当的resize。
除非你知道你需要的最小矢量大小为20,否则我会忘记预先调整大小并让它在必要时增长。