2011-10-30 9 views
0

私はまだC++テンプレートを習得しており、以下を使って特殊な静的関数からメンバーを呼び出す際に問題が発生しました。 GCCは文句を言う:"無効メンバーの使用C < const char *> ::値::静的メンバー関数で。私はこのフォーラムや他のいくつかを検索しました。私の友人でさえ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

テンプレートとは関係ありません。

valueはインスタンスメンバであり、Cのインスタンスを提供する場合にのみアクセスできます。静的関数にはthisインスタンスがなく、明示的にインスタンスを提供するために.または->メンバーアクセス演算子を使用していません。

+0

ありがとう@Ben、私が探していたもの!いい説明。 +1 – jrd1

1

echo()は静的なため、インスタンスレベルのフィールドvalueにはアクセスできません。

この関数を非静的にするか、フィールドを静的にします。

+1

より正確には、非修飾名を使用してインスタンスメンバーにアクセスすることはできません。 –