0

以下がコンパイルされないのはなぜですか(MSVC10-しかし、有効なC ++ではないと思われます)。回避策はありますか?

template <typename M>
struct MyClass
{
    typedef std::vector<M>::iterator iteratorT;

    iteratorT myIterator;

};

エラーはerror C2146: syntax error : missing ';' before identifier 'iteratorT'です。たくさんのバリエーションを試しましたが、同じ結果になりstd::vector<M>::iteratorました。メンバー関数の型として使用することはできますが、メンバー変数の型として使用することはできません。

4

1 に答える 1

4

の場合ですtypename。簡単に言うと、代わりにこれを行う必要があります。

 typedef typename std::vector< M >::iterator iteratorT;

std::vector< M >::iterator長い答えですが、コンパイラーは何が解決されるかを知らないので、M何でも可能であり、それに特化している可能性がありstd::vectorます。具体的には、タイプなのか値なのかわからず、std::vector< M >::iteratorその値を信じています。を挿入して、コンパイラにその型を明示的に伝える必要がありますtypename

于 2012-05-18T00:06:35.993 に答える