25

私は次のようなコードを持っています:

namespace mymap {
    template <class Key,template <typename T > class Allocator> myownmap {
        typedef pair<const unsigned int, Key> typename _myPair;
        typedef multimap<unsigned int, Key,less<Key> ,Allocator<_myPair> > typename _entriesType;
    }
}

MSVCで正常にコンパイル(および動作)しますが、gccは無効な構文について不平を言っています:

.hpp:20: error: expected nested-name-specifier before ‘_myPair’
.hpp:20: error: two or more data types in declaration of ‘_myPair’

私が間違っているのは何ですか?

4

3 に答える 3

36

そこtypenameでは必要ないため、許可されていません。

MSVCは、実際に使用されるまでテンプレートを適切に解析しないため、一部のエラーは後で検出されるまで検出されません。

于 2011-06-27T06:39:26.813 に答える
10

「expectednested-name-specifier」は、typenameキーワードの後に​​、たとえば、テンプレートパラメータのネストされた名前を使用することが期待されることを意味しますtypedef typename Key::iterator ...。あなたの場合、を使用する必要はありませんtypename

于 2011-06-27T06:42:55.027 に答える
6
typedef pair<const unsigned int, Key> /*typename*/ _myPair;
                                      ^^^^^^^^^^^^ not needed

ここでgcc-4.5の出力を参照してください。myownmap(それは存在classまたは機能に当てはまります)

于 2011-06-27T06:43:03.687 に答える