【问题标题】:C++ Nested Template Class Method IssueC++ 嵌套模板类方法问题
【发布时间】:2011-08-25 17:44:39
【问题描述】:

我遇到了嵌套类模板的方法声明问题。 我有这样的事情:

template <typename T>
class HashTrie
{
    template <typename Y>
    class Entry
    { // members and methods here
    };

    template <typename U>
    class Node
    { // members and methods here
    };

     // members and methods here
}

以下似乎没有问题:

template <typename T>
template <typename Y>
HashTrie<T>::Entry<Y> HashTrie<T>::Entry<Y>::someMethod() {
    //...
}

但是,这不是:

template <typename T>
template <typename U>
std::map<char, HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::anotherMethod() {
// ...
}

我在 GCC 上收到以下错误

./HashTrie.h:389: error: type/value mismatch at argument 2 in template parameter list for ‘template<class _Key, class _Tp, class _Compare, class _Alloc> class std::map’
./HashTrie.h:389: error:   expected a type, got ‘(HashTrie::Node < <expression error>)’
./HashTrie.h:389: error: template argument 4 is invalid
./HashTrie.h:389: error: expected unqualified-id before ‘>’ token

我尝试添加类型名,但这似乎没有帮助

template <typename T>
template <typename U>
std::map<char, typename HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::anotherMethod() {
// ...
}

结果...

./HashTrie.h:389: error: template argument 2 is invalid
./HashTrie.h:389: error: template argument 4 is invalid
./HashTrie.h:389: error: expected unqualified-id before ‘>’ token

icpc 说:

./HashTrie.h(389): error: template parameter "HashTrie<T>::Node [with T=T]" may not have a template argument list
    std::map<char, typename HashTrie<T>::Node<U> > HashTrie<T>::Node<U>::newNodeMap() {

我不太确定在这里做什么,并且很难在网络上找到任何类似的问题。任何帮助将不胜感激。

【问题讨论】:

    标签: c++ templates nested typedef typename


    【解决方案1】:

    这样说:

    template <typename T>
    template <typename U>
    std::map<char, typename HashTrie<T>::template Node<U> > HashTrie<T>::Node<U>::foo()
    {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-22
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 2014-03-05
      相关资源
      最近更新 更多