不能在 GCC 中使用数组

Cannot use array with GCC

我正在 Linux 上使用 GCC 4.8.4 进行编译(使用 -std=c++0x -fPIC)。

我想使用一个由我定义的数组,但出现此错误:

class value 
{
    public:
    typedef std::vector<value> array;
    typedef std::map<std::string, value> object;
    protected:
        int type_;
        union 
        {
            ...
            array* array_;
        };

    typedef value::array array;
}

class ErrorMessage
{
    array my_array;
}

编译错误:

/usr/include/c++/4.8/array:81:12: note:                 template<class _Tp, long unsigned int _Nm> struct std::array
 struct array
        ^
../sources/ErrorMessage.h:290:2: error: ‘array’ does not name a type
array my_array;

有办法解决这个问题吗? (使用 GCC 4.4.7 它可以工作)

谢谢。

因为 <array> 是从某个地方间接包含的,而你犯了 using namespace std 的错误,ErrorMessage 中的 "array" 指的是 std 中的那个名字命名空间。
这是一个 class 模板,而不是类型 - 因此是错误消息。

value之外,其array被称为value::array
value 中的 typedef value::array array 毫无意义;名称 array 仍然只存在于 class 范围内。您还不如写成 typedef array array;。)

写入

class ErrorMessage
{
    value::array my_array;
};

此外,不要重复使用标准名称。让大家一头雾水。