Вопрос шаблона C ++ - PullRequest
       2

Вопрос шаблона C ++

6 голосов
/ 16 сентября 2011

Я пишу несколько тестовых примеров для кода, разоблачающего имена в C ++, и получаю странную ошибку, когда пытаюсь скомпилировать это: (ниже приведен патологически плохой код C ++, который я бы никогда не использовал на практике).

template<class U, class V>
class TStruct
{
  U u;
  V v;
public:
  void setU(const U& newu) {u = newu; } 
};

template<class T, class U>
class Oog
{
    T t;
    U u;

public:
    Oog(const T& _t, const U& _u) : t(_t), u(_u) {}
    void doit(TStruct<T,U> ts1, TStruct<U,T> ts2, U u1, T t1) {}

    template<class F>
    class Huh
    {
        F f;
    public:

        template<class V>
        class Wham
        {
            V v;
        public:
            Wham(const V& _v) : v(_v) {}
            void joy(TStruct<T,V> ts1, U u, F f) {}
        };
    };
    int chakka(const Huh<T>::Wham<U>& wu, T t) {}    // error here
};

ошибка выглядит следующим образом:

 "typetest.cpp", line 165: error: nontype "Oog<T, U>::Huh<F>::Wham [with F=T]"
  is not a template

Есть идеи, как я могу это исправить?

Ответы [ 3 ]

7 голосов
/ 16 сентября 2011

Правильная строка должна быть такой, как

int chakka(const typename Huh<T>::template Wham<U>& wu, T t) ...
     it's a type ^^^^^^^^         ^^^^^^^^ indicate that 'Wham' is a template

[Примечание: g ++ очень полезно в этом случае :)]

2 голосов
/ 16 сентября 2011

Вы должны сказать, что Wham-член Huh будет шаблоном:

const Huh<T>::template Wham<U> &
0 голосов
/ 16 сентября 2011

Этого должно быть достаточно (зависимые типы вызывают проблемы)

int chakka(const typename Huh<T>::Wham<U>& wu, T t) {}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...