我正在为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
我有什么想法可以解决?
答案 0 :(得分:7)
正确的行应为as,
int chakka(const typename Huh<T>::template Wham<U>& wu, T t) ...
it's a type ^^^^^^^^ ^^^^^^^^ indicate that 'Wham' is a template
答案 1 :(得分:2)
你需要告诉它,Huh的Wham成员将成为一个模板:
const Huh<T>::template Wham<U> &
答案 2 :(得分:-1)
这应该足够了(依赖类型会引起麻烦)
int chakka(const typename Huh<T>::Wham<U>& wu, T t) {}