我还是c ++的新手,我想知道为什么我一直收到错误"无效使用'这个'在非会员职能"对于"这个"的每个实例在我的cpp文件中。
cpp文件(只是方法)
ostream & operator<< (ostream & outS, Complex & rhs) {
cout << this->real;
if (this->imag < 0) {
cout << "-";
if (this->imag != -1)
cout << (-this->imag);
cout << "i";
} else if (this->imag >0){
cout << "+";
if (this->imag != 1)
cout << this->imag;
cout << "i";
return outS;
}
头文件(部分)
public:
friend ostream & operator<< (ostream&, Complex&);
我似乎也得到了错误&#34;&#39; Complx&#39;没有命名类型 Complx :: Complex(const Complex&amp; object)&#34; ^
cpp文件
Complx::Complex (const Complex& object) {
real = object.real;
imag = object.imag;
}
头文件
public:
Complex (const Complex&);
任何帮助都会非常感激,如果需要,我可以发布我的其余代码(我想只是发布部分内容会更容易阅读)。
答案 0 :(得分:1)
this
指的是您当前的对象 - 该方法所属的对象。当你的方法独立时,它不是一个对象的一部分,所以this
没有任何意义。您似乎不是this->
而是打算引用rhs.
。
答案 1 :(得分:1)
在operator<<
中,它不是您班级的成员。因此,它没有this
指针,仅适用于类非静态成员。
class Complex
{
double imag, real;
public:
Complex(const _real=0.0, const _imag=0.0);
Complex(const Complex&);
// friend functions are not member of the class
friend ostream& operator<< (ostream&, Complex&);
// this is a member of the class
Complex operator+(Complex& another)
{
// I am a member so I have 'this' pointer
Complex result;
result.real = this->real + another.real;
result.imag = this->imag + another.imag;
return result;
}
};
ostream& operator<<(ostream& stream, Complex& rhs)
{
// I do not have 'this' pointer, because I am not a member of a class
// I have to access the values via the object, i.e. rhs
stream << rhs.real << "+" << rhs.imag << 'i';
return stream;
}
然而我的问题是,你为什么要使用&#39;朋友运营商&lt;&lt;&#;;恕我直言,它不应该是班级的朋友,相反,班级应该提供double image() const { return this->imag; }
等功能,而非朋友operator<<
可以通过这些功能访问这些值。