从同一类的专用模板的静态函数访问类模板成员

时间:2011-10-30 23:02:40

标签: c++ static-members

我仍在学习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;
}

非常感谢您提供的任何见解。

2 个答案:

答案 0 :(得分:2)

它与模板无关。

value是实例成员,只有在您提供C的实例时才能访问它。静态函数没有this实例,并且您没有使用.->成员访问运算符来显式提供实例。

答案 1 :(得分:1)

echo()是静态的,因此无法访问实例级字段value

使函数非静态或使字段静态。

相关问题