我使用Visual Studio Express 2013并尝试运行此代码:
struct opcode {
int length;
};
std::map<int, struct opcode> opcodes;
opcodes[0x20] = {
3
};
我收到此错误:
error C2040: 'opcodes' : 'int [32]' differs in levels of indirection from 'std::map<int,opcode,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>'
当我将鼠标悬停在opcodes
上时,我会得到this declaration has no storage class or type specifier
。
解
我的问题是我把声明放在了函数之外。
答案 0 :(得分:5)
在C ++语言语句中 - 即&#34;实际代码&#34; - 必须驻留在内部功能。此
opcodes[0x20] = {
3
};
是一份声明。您不能在不声明函数的情况下将其放入文件中。你不能只在文件中间编写C ++代码(即语句)。
你可以在&#34;空白&#34;函数之间是写声明。因此,上面的语句被编译器解释为声明。因此来自编译器的奇怪错误消息。
如果您打算将其作为声明,则应该如下所示(例如)
int main()
{
opcodes[0x20] = { 3 };
}
但是,通过使用初始化程序,您可以在没有函数的情况下实现相同的效果,这是声明的一部分
std::map<int, struct opcode> opcodes = { { 0x20, { 3 } } };