一个友元函数的问题不知道怎么解决 帮帮忙!!!!!!!!!!!!!!!!!!!!

kekeshu 2008-11-14 09:24:28
//头文件 counter.h
#include<iostream>
using namespace std;
class CCounter
{
public:
CCounter(void)
{
m_Value=0;
}
friend CCounter operator +(int,CCounter);
private:
int m_Value;
};
//实现文件
#include"counter.h"
CCounter operator+(int num,CCounter obj)
{
CCounter obj1;
obj1.m_Value=num+obj.m_Value;
return obj1;
}
//main函数
#include"counter.h"
void main(void)
{
CCounter oCCounter1;
CCounter oCCounter2;
oCCounter1=oCCounter2+10;
cout<<"oCCounter1="<<CCounter1.m_Value<<endl;
}
请问为什么友元函数老是出现内部编译错误在VC++6.0中 是上面的程序有问题还是这个编译器不支持呢
谢谢
...全文
145 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
霍大脚 2008-11-21
  • 打赏
  • 举报
回复
结帖率:0.00%
kekeshu 2008-11-21
  • 打赏
  • 举报
回复
这个工程是我的测试工程,是借这个东西来讨教下为什么会编译不通过
kekeshu 2008-11-21
  • 打赏
  • 举报
回复
那个参数在前在后没关系的把 有元不强调那点的 而成员函数才强调那一点呢
在成员函数中的参数要和式子的相对应
jia_xiaoxin 2008-11-15
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;
class CCounter
{
public:
CCounter(void)
{
m_Value=0;
}
friend CCounter operator +(int,CCounter);
private:
int m_Value;
};

CCounter operator+(int num,CCounter obj)
{
CCounter obj1;
obj1.m_Value=num+obj.m_Value;
return obj1;
}

void main(void)
{
CCounter oCCounter1;
CCounter oCCounter2;
oCCounter1=10+oCCounter2; //等价于oCCounter1.operator +(10, oCCounter2),所以10必须是第一个参数
//CCounter1.m_Value为私有变量,
cout <<"oCCounter1=" /*<< CCounter1.m_Value*/ <<endl;
}
fasdfdsfdsf 2008-11-15
  • 打赏
  • 举报
回复
int型的是+的左操作数,不好意思[Quote=引用 9 楼 lovevivigao 的回复:]
按照CCounter operator+(int num,CCounter obj)这样定义,int型的是+的做操作数,CCounter 是右操作数。在实际使用时也要这样。
个人意见,+不必定义为友元,在类内部重载就可以了
[/Quote]
fasdfdsfdsf 2008-11-15
  • 打赏
  • 举报
回复
按照CCounter operator+(int num,CCounter obj)这样定义,int型的是+的做操作数,CCounter 是右操作数。在实际使用时也要这样。
个人意见,+不必定义为友元,在类内部重载就可以了
hzc191025 2008-11-14
  • 打赏
  • 举报
回复
vc6.0对这个支持不好
hooked 2008-11-14
  • 打赏
  • 举报
回复
4楼正解。不过程序还有其他问题:cout <<"oCCounter1=" <<CCounter1.m_Value <<endl;
太乙 2008-11-14
  • 打赏
  • 举报
回复
换个编译器就好嘞~
toadzw 2008-11-14
  • 打赏
  • 举报
回复
CCounter operator+(int num,CCounter obj)
oCCounter1=oCCounter2+10;
我用的就是6.0完全支持,是你重载的与你有的不相应了。要想把10放后面,你参数中的int也要放在后面;
ding1188 2008-11-14
  • 打赏
  • 举报
回复
vs6以后的都可以
kekeshu 2008-11-14
  • 打赏
  • 举报
回复
那要做这样操作的,哪个编译器行呢
帅得不敢出门 2008-11-14
  • 打赏
  • 举报
回复
vc6.0对友元支持程序不够.

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧