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

“预期的嵌套名称说明符”意味着在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 回答