为Structs C ++的向量创建大小时出错

时间:2014-10-27 00:38:19

标签: c++

这是我为大学课程所做的一个项目,我无法找到适合我的任何答案。我很可能不理解答案。

我有一个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;声明结构是没有我知道的私有部分的类,并且你必须有一个构造函数来初始化结构的向量,我不知道。问题是,没有我提出的构造函数已经使错误消失了。我完全迷失了,并希望得到一些帮助。

3 个答案:

答案 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,否则我会忘记预先调整大小并让它在必要时增长。