2013-08-09 10 views
5

C++ 11 std::arrayで奇妙な動作が起こりました。私は、メンバ変数としてstd::array<std::tuple<int, float>, 6> myTuples;でコンパイルしようとすると、私はこれらのエラーを取得:std :: array std :: tupleの配列で不完全な型エラーが発生しました

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に含めると、非常によく似た状況で完全にコンパイルされます。私はコンパイラ(MinGW g ++バージョン4.7.2)だけでなく、コマンドラインでコンパイラで同じものをコンパイルしていることを確認しましたg++ -Wall -std=c++11

なぜ私はこれらのエラーが発生する可能性がありますか?以前は、std::arrayの代入(デフォルトのパラメータにはarray = {{a,b,c}};を使用)を解析中にコンパイラがクラッシュするという問題がありましたが、今回はコンパイラエラーがクラッシュしません。

+4

'#include 'を実行しましたか? – dunc123

+3

」を忘れた場合でも同様のエラーを再現できます。実際には、g ++ 4.7 '/usr/include/c++/4.7/array:77:43と同じエラーが発生しました:エラー: 'std :: array <_Tp, _Nm> :: _ M_instance'に不完全な型があります –

+0

[SSCCE]( http://sscce.org/)。 – juanchopanza

答えて

10

要求に応じて、<tuple>を含めるのを忘れたため、コンパイラは不完全な型の不平を言いました。

+3

私の場合、 '#include ' –

関連する問題