2017-10-25 4 views
-1

私は現在、これらのコード行でクラスを持っています。私が苦労しているのは、私のIDEで「ルートに宣言されていない識別子を使用する」と書かれていることです。IDEがC++で宣言されていない識別子を宣言している理由を確認することに問題がある

なぜですか?

template<typename T> 
    class X 
    { 
    public: 
     const void write(std::ostream & output); 

    private: 
     std::unique_ptr< TreeNode<Ty> > root; 


    }; 


    const void write(std::ostream & output) 
    { 
     root->write(output); 
    } 

テンプレートを使用してコードのより詳細な範囲を表示するように編集します。

+0

戻り値の型 'const void'は何ですか? 'void' return型は、関数が値を返さないことを意味します。 'const'は返されない値にどのように適用されますか?後で 'const'を配置したいと思うかもしれません:' void write(std :: ostream&output)const; '? –

+0

[クラスのメンバ変数にアクセスできないメソッド(C++)](https://stackoverflow.com/questions/20981540/a-method-cant-access-a-member-variable-of) -the-same-class-c) – scohe001

+0

@ThomasMatthews最後のconstは何を意味しますか? 私が達成しようとしているのは、ostreamリファレンスを使用してルート上の書き込みを呼び出す関数を書くことです。書き込みはconstとしてマークされます。 – Scanner

答えて

1

あなたwrite機能がclass Xに属しているコンパイラに指示するスコープ解決演算子を使用してみてください:

const void X::write(std::ostream & output) 
{ 
    root->write(output); 
} 

編集1:テンプレートとテンプレート
、構文は次のようになります。

​​
+0

Xはクラス、名前空間、列挙ではないことを教えてくれます – Scanner

+0

@Scanner 'X'の定義の後、同じファイル内に' write'を定義していますか?または 'Xの定義を含むファイルの' #include'の後に? – aschepler

+0

@aschepler書き込みの定義はXの定義の後で、同じファイル内にあります。それらはすべてテンプレートの下にあります。書き込みは、クラス内でconst void write(std :: ostream&output)と宣言されています。 – Scanner

関連する問題