读书人

友元为什么在vc6下编译通不过vs2005

发布时间: 2013-06-25 23:45:41 作者: rapoo

友元为什么在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;//这里要返回。。
}

读书人网 >C++

热点推荐