cam*_*ilk 1 c++ inheritance gcc templates
此代码在GNU编译器中产生错误:
class A
{
public:
int X;
};
template<class T>
class Foo : public T
{
public:
void doStuff();
};
template<class T>
void Foo<T>::doStuff()
{
X++;
}
Run Code Online (Sandbox Code Playgroud)
已经有一个答案为什么这是一个错误.我想知道是否有另一种解决此错误的方法而不是使用
T::X
Run Code Online (Sandbox Code Playgroud)
每次我想引用X成员.我试过这个:
template<class T>
void Foo<T>::doStuff()
{
using T::X;
X++;
}
Run Code Online (Sandbox Code Playgroud)
但是GCC给出了一个错误:"不允许使用类限定名称"
using T::X
应该管用.如果它给出了错误,那么代码还有其他问题,或者它必须是编译器错误.看看自己:http://www.ideone.com/MI9fM
您可以使用this
指针,如
template<class T>
void Foo<T>::doStuff()
{
this->X++;
}
Run Code Online (Sandbox Code Playgroud)
这为编译器提供了查找符号的提示 X
.
演示:http://www.ideone.com/NIucO
你也可以这样做:
template<class T>
void Foo<T>::doStuff()
{
T::X++;
}
Run Code Online (Sandbox Code Playgroud)演示:http://www.ideone.com/PswvG