std :: map,带有struct error的值

时间:2014-08-09 16:24:09

标签: c++ visual-c++ c++11 visual-studio-2013

我使用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

我的问题是我把声明放在了函数之外。

1 个答案:

答案 0 :(得分:5)

在C ++语言语句中 - 即&#34;实际代码&#34; - 必须驻留在内部功能。此

opcodes[0x20] = {
    3
};

是一份声明。您不能在不声明函数的情况下将其放入文件中。你不能只在文件中间编写C ++代码(即语句)。

你可以在&#34;空白&#34;函数之间是写声明。因此,上面的语句被编译器解释为声明。因此来自编译器的奇怪错误消息。

如果您打算将其作为声明,则应该如下所示(例如)

int main()
{
  opcodes[0x20] = { 3 };    
}

但是,通过使用初始化程序,您可以在没有函数的情况下实现相同的效果,这是声明的一部分

std::map<int, struct opcode> opcodes = { { 0x20, { 3 } } };