友元为什么在vc6下编译通不过,vs2005没问题
#include<iostream>
using namespace std;
class coord1
{
int x;
int y;
public:
coord1()
{
x=0;y=0;
}
coord1(int ix,int iy)
{
x=ix;
y=iy;
}
intgetx()
{
return x;
}
int gety()
{
return y;
}
friend ostream& operator<<(ostream& stream,coord1 obj);
friend istream& operator>>(istream& stream,coord1 obj);
};
ostream& operator<<(ostream& stream,coord1 obj)
{
stream<<obj.x<<","<<obj.y<<endl;
return stream;
}
istream& operator>>(istream& stream,coord1 obj)
{
stream>>obj.x>>obj.y;
}
int main()
{
}
Compiling...
kkk.cpp
d:\dongnanpractice\kkk\kkk.cpp(31) : error C2248: 'x' : cannot access private member declared in class 'coord1'
d:\dongnanpractice\kkk\kkk.cpp(5) : see declaration of 'x'
d:\dongnanpractice\kkk\kkk.cpp(31) : error C2248: 'y' : cannot access private member declared in class 'coord1'
d:\dongnanpractice\kkk\kkk.cpp(6) : see declaration of 'y'
d:\dongnanpractice\kkk\kkk.cpp(36) : error C2248: 'x' : cannot access private member declared in class 'coord1'
d:\dongnanpractice\kkk\kkk.cpp(5) : see declaration of 'x'
d:\dongnanpractice\kkk\kkk.cpp(36) : error C2248: 'y' : cannot access private member declared in class 'coord1'
d:\dongnanpractice\kkk\kkk.cpp(6) : see declaration of 'y'
d:\dongnanpractice\kkk\kkk.cpp(41) : warning C4508: 'main' : function should return a value; 'void' return type assumed
Error executing cl.exe.
kkk.exe - 4 error(s), 1 warning(s)
[解决办法]
我这个在VC6 下就可以,邪门了
#include<iostream>
using namespace std;
class coord1
{
int x;
int y;
public:
coord1()
{
x=0;
y=0;
}
coord1(int ix,int iy)
{
x=ix;
y=iy;
}
int getx()
{
return x;
}
int gety()
{
return y;
}
friend ostream& operator<<(ostream& stream,coord1 obj);
friend istream& operator>>(istream& stream,coord1 obj);
};
ostream& operator<<(ostream& stream,coord1 obj)
{
stream<<obj.x<<","<<obj.y<<endl;
return stream;
}
istream& operator>>(istream& stream,coord1 obj)
{
stream>>obj.x>>obj.y;
return stream;
}
int main()
{
coord1 cod1(110, 132);
cout << cod1 << endl;
return 0;
}
[解决办法]
又是蛋疼的VC6。。不过你的代码的确有错。。
istream& operator>>(istream& stream,coord1 obj)
{
stream>>obj.x>>obj.y;
return stream;//这里要返回。。
}