4

我正在尝试做这样的事情:

//stack.h

#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include <vector>

struct CharStack {
    int sp;
    std::vector<char> data(87);
} S;

但我收到一些错误,例如:

error: expected identifier before numeric constant
error: expected ',' or '...' before numeric constant

为什么会这样?当我想创建一个动态长度的向量时似乎没有问题

4

3 回答 3

8

要在结构(或类)中构造对象,您需要编写构造函数。像这样

struct CharStack {
    CharStack() : data(87) {}
    int sp;
    std::vector<char> data;
} S;

这就是 C++ 的语法。

于 2013-09-13T16:15:35.900 回答
6

您不能像这样在其声明中初始化成员。在 C++11 中,您可以使用=大括号初始化器对其进行初始化,例如:

std::vector<char> data = std::vector<char>(87);

请注意,这data{87};会在这里做错事,因为这将使用单个值填充向量,而不是使用该大小对其进行初始化。

如果您停留在过去,那么所有非静态成员都需要由构造函数初始化:

struct CharStack {
    CharStack() : data(87) {}  // and maybe initialise sp too

    int sp;
    std::vector<char> data;
};

std::array<char, 87>但是,如果您确实希望它具有固定大小(如问题标题所暗示的那样),那么将其设置为,甚至是普通的 old可能更有意义char[87]

于 2013-09-13T16:18:00.347 回答
2

您需要将向量的构造移动到类的构造函数中。

struct CharStack {
    int sp;
    std::vector<char> data;

    CharStack() : data(87) {}
};

或者,如果您真的想要一个固定大小的结构并且可以选择 C++11,请使用std::array

struct CharStack {
    int sp;
    std::array<char,87> data;
};
于 2013-09-13T16:17:53.180 回答