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 回答