std :: array不完整类型错误,数组为std :: tuple

时间:2013-08-09 11:03:53

标签: c++ c++11 glm-math

我在使用C ++ 11 std::array时遇到了一些奇怪的行为。当我尝试使用std::array<std::tuple<int, float>, 6> myTuples;作为成员变量进行编译时,我收到了以下错误:

mingw32\4.7.2\include\c++\array:-1: In instantiation of 'struct std::array<std::tuple<int, float>, 6u>':
mingw32\4.7.2\include\c++\array:77: error: 'std::array<_Tp, _Nm>::_M_instance' has incomplete type

我不确定是否有任何改变,但它所在的类是从另一个模板类派生的模板类。模板参数是unsigned int,它确定基类中受保护std::array的大小,我在派生类using Base<param>::m_array;中引用它。派生类有各种glm::vec3/dmat4/quat类型,并使用OpenGL固定函数glBegin(GL_QUADS);。我正在使用SDL-1.2.15来创建OpenGL上下文。我认为大部分内容都是无关紧要的,但也许不是。我可以粘贴代码,但是所有内容都是互连的,因此它只能作为一个整体进行编译(在源之间分配大约一千行左右)。

然而,当我在this ideone example中包含同一行时,在非常相似的情况下,它编译完全正常。我通过命令行g++ -Wall -std=c++11

在我的编译器上编译它,检查它不仅仅是我的编译器(MinGW g ++版本4.7.2)

有谁知道为什么我会收到这些错误?在解析std::array赋值(使用array = {{a,b,c}};作为默认参数)时编译器崩溃之前我遇到了一些问题,但这次编译器错误没有崩溃。

1 个答案:

答案 0 :(得分:11)

根据要求,您忘记包含<tuple>,这就是编译器抱怨类型不完整的原因。