0
 //**** Build of configuration Debug for project Calculator ****

   **** Internal Builder is used for build               ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -o src\Calculator.o ..\src\Calculator.cpp
..\src\/Calculator.h: In function 'std::ostream& operator<<(std::ostream&, CComplex)':
   ..\src\/Calculator.h:38:9: error: 'float CComplex::m_imaginary' is private
  ..\src\Calculator.cpp:79:8: error: within this context
     ..\src\/Calculator.h:37:9: error: 'float CComplex::m_real' is private
   ..\src\Calculator.cpp:81:12: error: within this context
       ..\src\/Calculator.h:38:9: error: 'float CComplex::m_imaginary' is private
        ..\src\Calculator.cpp:81:31: error: within this context
     ..\src\/Calculator.h:37:9: error: 'float CComplex::m_real' is private
       ..\src\Calculator.cpp:85:12: error: within this context
         ..\src\/Calculator.h:38:9: error: 'float CComplex::m_imaginary' is private
       ..\src\Calculator.cpp:85:31: error: within this context
Build error occurred, build is stopped
Time consumed: 687  ms.  

誰でも私を助けてくれますか - アクセスを受け入れていないプライベート関数にアクセスしようとしています。

4

2 に答える 2

2

そうでなければ、これは素晴らしい質問だったでしょう。



クラス メンバーのリストの前にある場合、private キーワードは、それらのメンバーがメンバー関数およびクラスのフレンドからのみアクセス可能であることを指定します。これは、次のアクセス指定子またはクラスの終わりまでに宣言されたすべてのメンバーに適用されます。

クラスの外部からアクセスしようとしているため、メンバー関数にアクセスできません。上で述べたように、private キーワードはまさにそれを防ぐために使用されます。

クラスの外部からアクセスする必要がある場合は、public キーワードを使用してパブリック メソッドにする必要があります。

private キーワードに関する例と説明については、こちらを参照してください。


エラーを見ると、問題は operator<< のオーバーロードにあると思います。演算子はフレンド関数としてのみオーバーロードでき、それ自体で問題を解決するはずです。

friend std::ostream& operator<<(std::ostream&, CComplex);

于 2012-12-04T10:59:55.947 に答える
1

あなたはおそらくクラスoperator<<の友達になりたいと思うでしょう。CComplexこのようなもの:

class CComplex {
    ...
    // It doesn't matter whether this declaration is on a private, 
    // public or protected section of the class. The friend function
    // will always have access to the private data of the class.
    friend std::ostream& operator<<(std::ostream&, CComplex);
};
于 2012-12-04T13:41:14.897 に答える