12

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保護されているのサイズを決定するものです。派生クラスにはさまざまな型があり、OpenGL 固定関数のものを使用します。OpenGL コンテキストを作成するために SDL-1.2.15 を使用しています。そのほとんどは無関係だったと思いますが、そうではないかもしれません。コードを貼り付けることはできますが、すべてが相互接続されているため、全体としてしかコンパイルできません (ソース間で分散されるのは約 1000 行です)。std::arrayusing Base<param>::m_array;glm::vec3/dmat4/quatglBegin(GL_QUADS);

ただし、このイデオンの例に同じ行を含めると、非常によく似た状況で、完全に正常にコンパイルされます。コマンドラインを使用してコンパイラで同じものをコンパイルすることにより、それが単なるコンパイラ(MinGW g ++バージョン4.7.2)ではないことを確認しましたg++ -Wall -std=c++11

これらのエラーが発生する理由を知っている人はいますか? 以前は、std::array割り当ての解析中にコンパイラがクラッシュするという問題がありましたが (array = {{a,b,c}};既定のパラメーターを使用)、今回はコンパイル エラーではなくクラッシュしました。

4

1 に答える 1

14

<tuple>要求どおり、コンパイラが不完全な型を訴えた理由を含めるのを忘れていました。

于 2013-08-10T08:04:53.643 に答える