我仍在学习C ++模板,并且遇到了使用以下方法从专用静态函数调用成员的问题。 GCC抱怨:“在静态成员函数中无效使用成员C< const char *> :: value。”我搜索了这个论坛和其他几个人,甚至我的朋友Google也无法帮助我。我认为错误必须是我忽略的东西,因为我创建了一个非专业版的类(具有相同的静态成员函数),我仍然得到相同的错误。有什么想法吗?
template <typename T = const char*>
class C { };
//specialization for const char*
template <>
class C <const char*> {
public:
C() { }
static void echo(int x);
private:
int value;
};
//error occurs here
void C<const char*>::echo(int x) {
value = x;
}
非常感谢您提供的任何见解。
答案 0 :(得分:2)
它与模板无关。
value
是实例成员,只有在您提供C
的实例时才能访问它。静态函数没有this
实例,并且您没有使用.
或->
成员访问运算符来显式提供实例。
答案 1 :(得分:1)
echo()
是静态的,因此无法访问实例级字段value
。
使函数非静态或使字段静态。