首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

友元为什么在vc6下编译通不过,vs2005没有关问题

2013-06-25 
友元为什么在vc6下编译通不过,vs2005没问题#includeiostreamusing namespace stdclass coord1{int xin

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

热点排行