收录日期:2018/06/20 09:20:29 时间:2016/05/20 21:31:31 标签:C语言
为什么我将名称空间去掉后,编译无法通过,说不能访问私有成员

namespace COMPLEX
{
ostream & operator<< (ostream & os, const Complex & b)
{
os << "(" << b.x << ", " << b.y << "i)";
return os;
}

istream & operator>> (istream & is, Complex & b)
{
cout << "Input real part: ";
is >> b.x;
cout << "Input imaginary part: ";
is >> b.y;
return is;
}


}


把相关的类,函数,以及main放上来
把相关的类,函数,以及main放上来
因为你的Complex 类,在名字空间COMPLEX中;

你如果想在名字空间外定义这 << >>
可以用

    using namespace COMPLEX;

也可以 const COMPLEX::Complex & b
不使用namespace就不能通过编译,why?

程序如下:
把加注释的行去掉后VC6就不能通过编译了,但是用Dev C++ 可以通过

#include <iostream>
using namespace std;

namespace COMPLEX//------------------
{ //------------------------   
class Complex
{
private:
double x;
double y;

public:
Complex(const double a=0, const double b=0);
~Complex();
void set(const double a, const double b);

Complex operator+ (const Complex & b) const;
Complex operator- (const Complex & b) const;
Complex operator* (const Complex & b) const;
Complex operator* (const double & b) const;
Complex operator~ () const;


friend Complex operator* (double b, const Complex & a);
friend ostream & operator<< (ostream & os, const Complex & b);
    friend istream & operator>> (istream & is, Complex & b);
};

Complex::Complex(const double a, const double b)
{
x=a;
y=b;
}

Complex::~Complex()
{
}

void Complex::set(const double a, const double b)
{
x=a;
y=b;
}

Complex Complex::operator +(const Complex & b) const
{
return Complex(x+b.x, y+b.y);
}

Complex Complex::operator - (const Complex & b) const
{
return Complex(x-b.x, y-b.y);
}

Complex Complex::operator * (const Complex & b) const
{
return Complex(x*b.x-y*b.y, x*b.y + y*b.x);
}

Complex Complex::operator * (const double & b) const
{
return Complex(b*x, b*y);
}

Complex Complex::operator ~ () const
{
return Complex(x, -y);
}

Complex operator * (const double  b, const Complex & a)
{
return a * b;
}

ostream & operator<< (ostream & os, const Complex & b)
{
os << "(" << b.x << ", " << b.y << "i)";
return os;
}

istream & operator>> (istream & is, Complex & b)
{
cout << "Input real part: ";
is >> b.x;
cout << "Input imaginary part: ";
is >> b.y;
return is;
}
}//------------------------------------
int main()
{
using COMPLEX::Complex;//--------------------

Complex a(3.0, 4.0);
Complex c;
cout << "Enter a complex number(q to quit):\n";
while(cin>>c){
cout << "c is " << c << endl;
cout << "complex conjugate is " << ~c << endl;
cout << "a is " << a << endl;
cout << "a+c is " << a+c << endl;
cout << "a-c is " << a-c << endl;
cout << "a*c is " << a*c << endl;
cout << "2*c is " << 2*c << endl;
cout << "Enter a complex number(q to quit):\n";
}
cout << "Done!" << endl;
return 0;
}