我想在结构中声明一个char数组,并在声明时对其进行初始化。我在 g++ 和 VS2010 编译器上编译它。 g++ 可以编译以下代码,但 VS2010 不能。 VS2010有错误。 从 C++ 入门来看,const static 类型数据可以在结构/类中声明时进行初始化。但是当我将它用于 OPName 数组时,两个编译器都会报告错误。我只能在 g++ 上使用 const 来实现这一点。为什么会发生这种情况? 当在结构/类中声明数组变量时,初始化数组变量(如我的示例(即 char 数组))的有效方法是什么?
这是代码(.c 文件):
typedef struct OPMap {
const char OPName[27][6] = {"SW", "LW", // 2
"J", "BEQ", "BNE", "BGEZ", "BGTZ", "BLEZ", "BLTZ", // 7
"ADDI", "ADDIU", // 2
"BREAK", // 1
"SLT", "SLTI", "SLTU", // 3
"SLL", "SRL", "SRA", // 3
"SUB", "SUBU", "ADD", "ADDU", // 4
"AND", "OR", "XOR", "NOR", // 4
"NOP"}; // 1
unsigned int op[8][8];
unsigned int op_TLB[4][8];
unsigned int op_R[8][8];
const unsigned int NOP = 0x00000000;
OPMap() {
//......
}
} Map;
最佳答案
在 C++11 之前,只有在该成员是 static const
并且也是非结构体、非数组(例如 >int
或 double
)。 VS2010 不符合 C++11,因此您会收到该错误。
要使代码在 C++11 之前工作,您应该更改为:
static const char OPName[27][6];
然后在您的 .cpp 文件之一(即不是头文件)中包含:
static const char OPMap::OPName[27][6] = {"SW", "LW", // 2
"J", "BEQ", "BNE", "BGEZ", "BGTZ", "BLEZ", "BLTZ", // 7
"ADDI", "ADDIU", // 2
"BREAK", // 1
"SLT", "SLTI", "SLTU", // 3
"SLL", "SRL", "SRA", // 3
"SUB", "SUBU", "ADD", "ADDU", // 4
"AND", "OR", "XOR", "NOR", // 4
"NOP"}; // 1
在 C++11 中,您可以通过添加 static constexpr
来在类定义中包含此表。
关于c - VS 编译器和 g++ 在结构体变量初始化方面的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25717075/