在struct - C ++中使用固定长度的向量

时间:2013-09-13 16:12:41

标签: c++

我正在尝试做类似的事情:

//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

为什么会这样?当我想创建一个动态长度为

的向量时似乎没有问题

3 个答案:

答案 0 :(得分: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>或甚至是普通的char[87]可能更有意义。

答案 1 :(得分:4)

要在struct(或类)中构造对象,您需要编写构造函数。喜欢这个

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

这就是C ++语法的原因。

答案 2 :(得分: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;
};