我正在尝试做类似的事情:
//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
为什么会这样?当我想创建一个动态长度为
的向量时似乎没有问题答案 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;
};