2011-10-30 40 views
0

我仍然在学习C++模板,并遇到有关使用以下方法从专用静态函数调用成员的问题。海湾合作委员会抱怨:“成员C的无效使用< const char *> ::静态成员函数中的值。”我已经搜索了这个论坛和其他几个人,甚至我的朋友谷歌也无法帮助我。我认为错误必须是我忽略的,因为我制作了一个非专业版的类(具有相同的静态成员函数),而且我仍然得到相同的错误。有任何想法吗?从同一个类的专门模板的静态函数中访问类模板成员

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

它与模板无关。

value是一个实例成员,只能在您提供C的实例时才能访问。静态函数没有this实例,并且您尚未使用.->成员访问算子来明确提供实例。

+0

谢谢@Ben,正是我在找的!很好的解释。 +1 – jrd1

1

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

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

+1

更准确地说,它不能使用非限定名称访问实例成员。 –

相关问题