VC++ 2010中出现“array is not a member of std”错误

3

下面这段C++11代码:

std::array<float, 3> A;

获取错误信息:

array is not a member of std.

在 Visual Studio 中,单词“array”是蓝色的,表示它是关键字。这是 CLI 的扩展。我曾经通过进入 Properties/C C++/Language 并将“禁用语言扩展”设置为 Yes 来修复过一次。我还将 Properties/General 设置为 No Common Language Support。但仍然无法解决问题。
如何使程序在编辑器中忽略 array 作为关键字的可见性而正常工作?

已经修复,因为您似乎只关心编辑器的可见问题。 - Johannes Schaub - litb
2个回答

7
您需要包含 <array> 头文件。

我已经弄清楚了并试图删除这个问题,但你比我更快。现在你已经回答了,所以无法删除。 "数组" 的蓝色让我感到困惑。先是一些虚假的波浪线,现在又是一些虚假的蓝色墨水。关闭 CLI 后,"array" 不是关键字,但它仍然是红色的。詹姆斯,你真的很有帮助。我非常感激。 - Jive Dadson
说成了“红色”,其实应该是“蓝色”。我已经编辑到一半,结果时间限制的5分钟就到了。今天真的越来越笨了,需要休息一下了。 - Jive Dadson
1
语法着色器将识别C++/CLI关键字,即使C++/CLI被禁用。在Visual Studio 2012中,体验大大提升,具有语义着色(因此,您可以将类型颜色设置为一种颜色,函数为另一种颜色,变量为另一种颜色等)。通过语义着色,仅当包括<array>时,“array”将被着色为类型(我发现这对于快速识别我打错的名称、缺少的包含文件或不正确的名称限定非常有帮助)。 - James McNellis
太棒了。我非常渴望使用2012版。由于我已经半退休了,所以现在只能使用Express版本。我还不知道何时可以使用桌面版。我知道最初的答案是“永远不会”,所以我不能抱怨。总比没有好。 - Jive Dadson
嘿@James,我有一个想法。(这是可能的。)建议高级错误消息架构师,在命名空间中找不到名称时,消息包含“嘿Bozo,你是否包含了正确的头文件?”-或类似的话语。 - Jive Dadson

0

即使在Ubuntu上使用g++的“array”指令,也可以重现此错误:

例如,这段C++代码:

#include <iostream>
#include <array>

using namespace std;
int main(){
    std::array<int, 5> myints;
    cout << myints.size();
}

编译并运行如下:

g++ -o s s.cpp
./s

输出错误:

/usr/include/c++/4.6/bits/c++0x_warning.h:32:2: error: #error This 
file requires compiler and library support for the upcoming ISO 
C++ standard, C++0x. This support is currently experimental, and 
must be enabled with the -std=c++0x or -std=gnu++0x compiler options.
s.cpp: In function ‘int main()’:
s.cpp:6:5: error: ‘array’ is not a member of ‘std’

解决方案:使用编译器选项-std=c++0x进行编译。
g++ -o s s.cpp -std=c++0x
./s

然后程序正确打印:
5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接