以下代码不能用 gcc 4.7.0 编译(使用 std=c++11 -O3)
int n;
std::vector< int[4] > A;
A.resize(n);
错误信息是长度,但最终
functional cast to array type ‘_ValueType {aka int[4]}‘
这是正确的吗?还是应该编译?更重要的是,如何避免这个问题? (没有定义一个新的结构来保存 int[4]
)
编辑:
如何解决C++98的问题?
最佳答案
您不能将数组存储在 vector 或任何其他容器中。要存储在容器中的元素类型(称为容器的值类型)必须是可复制构造和可赋值的。数组两者都不是。
但是,您可以使用数组类模板,例如 Boost、TR1 和 C++0x 提供的模板:
std::vector<std::array<type, size> >
(您需要将 std::array 替换为 std::tr1::array 以使用 C++ TR1 中包含的模板,或将 boost::array 替换为使用 Boost libraries 中的模板。或者,您可以自己写;这很简单。)
@source作者:詹姆斯·麦克内利斯
所以代码看起来像这样:
int n;
std::vector<std::array<int,3>> A;
A.resize(n);
关于c++ - C++ std::vector of array 的编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12184828/