| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 548 人关注过本帖
标题:求助:一句使用友元函数的语句编译通不过。
只看楼主 加入收藏
bardon
Rank: 2
等 级:论坛游民
帖 子:22
专家分:16
注 册:2011-1-16
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:5 
求助:一句使用友元函数的语句编译通不过。
(下面程序经楼下大虾指点后已进行了修改,OK,谢谢)

这是来源于自考教材上的程序,有friend 关键词的语句在visual  studio 2010中
编译通不过,如何改,请大虾指点,谢谢!
#include "stdio.h"
#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
    return 0;
}

#include <iostream>
using namespace std;


class complex{
private:
    int real;
    int image;
public:
     complex(int r=0,int i =0){ real=r;image=i;};
     friend complex operator + (complex&,complex&);
    void show(){ cout<<real <<"+"<<image <<"i;};      
   };   
complex operator +(complex&a,complex&b){
   
    int r=a.real +b.real;
    int i=a.image +b.image;
       return complex(r,i);
}     

void main(){

    complex x(6,8),y(9,6),z;
    z=x+y;
    x.show();
    cout<<"+ ";
    y.show();
    cout<<" = ";
    z.show();
    cout<<endl;
}



[ 本帖最后由 bardon 于 2011-2-17 23:21 编辑 ]
搜索更多相关主题的帖子: friend 关键词 
2011-02-17 18:00
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:606
专家分:2499
注 册:2009-4-8
收藏
得分:20 
大括号的匹配问题,还有类里的私用数据成员,用户是不能访问的。两个主函数。void main()这个写法不对。错误很多,教材上让你找错?

迭代的是人,递归的是神。
2011-02-17 20:26
bardon
Rank: 2
等 级:论坛游民
帖 子:22
专家分:16
注 册:2011-1-16
收藏
得分:0 
谢谢指点,那大括号的错是我没抄对出的错,现已改了,教材也有错,改后程序OK。偶在自学C++,对书上的程序都动手试一试才能理解,故有问题就来此求教,还有二章内容没学,快学完了,谢谢。


[ 本帖最后由 bardon 于 2011-2-17 23:09 编辑 ]
2011-02-17 22:47
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
#include "stdio.h" // 根据C/C++标准,只有#include <stdio.h>才是合法的,对标准库文件,使用""行为未定义。第二,C++中没有stdio.h,只有cstdio
#include "stdafx.h" // 不要把VC特有的东西搞进来。建议你别用预编译头文件;如果一定用,可以私下用,但在bbs上粘贴代码时应该把它移除

int _tmain(int argc, _TCHAR* argv[]) // C/C++标准中,主函数只有main,没有wmain,因此_tmain本身就是个笑话。记住,wmain是VC特有的,非标准
{
    return 0;
}

#include <iostream>
using namespace std;

class complex{
private: // 在C++中,一般的习惯是,class中private放最后,因为class更特显“行为”,struct更特县“状态”。这不是标准所强制,但它属于约定俗成
    int real; // 在C++中,一般的习惯是,private成员,以一个下划线结尾,即int real_。这不是标准所强制,但它属于约定俗成。这样看到变量名就可以知道其不能直接使用。
    int image;
public:
     complex(int r=0,int i =0){ real=r;image=i;}; // 这里面错误就多了,最起码最后多了个分号。
     // 应该写成 explicit complex( int r=0, int i=0 ) : real(r), image(i) {}。错误太多,就不一一细说了

     friend complex operator + (complex&,complex&);
     // 应该写成 friend complex operator+( const complex&, const complex& );

     void show(){ cout<<real <<"+"<<image <<"i;};
     // 第一,你应该用 friend ostream& operator<<( const complex& ); 不要被那些垃圾书给害了。第二,即使用show,也应该是 void show const() {……}

   };// 这里既然出现一个中文符号,假如你改不过来,建议先将中文输入法删除掉
complex operator +(complex&a,complex&b){
   
    int r=a.real +b.real;
    int i=a.image +b.image;
       return complex(r,i);
}     

void main(){ // int main 这个大错误,lintaoyn已经讲过了

    complex x(6,8),y(9,6),z;
    z=x+y;
    x.show();
    cout<<"+ ";
    y.show();
    cout<<" = ";
    z.show();
    cout<<endl;
}
收到的鲜花
  • bardon2011-02-18 11:57 送鲜花  5朵   附言:衷心感谢大虾耐心一一指点。
2011-02-18 08:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
程序代码:
#include <iostream>

class complex
{
    friend complex operator+( const complex&, const complex& );
    friend std::ostream& operator<<( std::ostream& os, const complex& cpl );
public:
    explicit complex( int r=0, int i=0 ) : real_(r), image_(i)
    {
    }

private:
    int real_;
    int image_;
};
inline complex operator+( const complex& a, const complex& b )
{
    return complex( a.real_+b.real_, a.image_+b.image_ );
}
std::ostream& operator<<( std::ostream& os, const complex& cpl )
{
    return os << '(' << cpl.real_ << '+' << cpl.image_ << "i)";
}

/////////////////

using namespace std;
int main()
{
    complex x(6,8), y(9,6);
    complex z = x+y;
    cout << x << " + " << y << " = " << z << endl;

    return 0;
}
// Output: (6+8i) + (9+6i) = (15+14i)

收到的鲜花
  • bardon2011-02-18 11:58 送鲜花  5朵   附言:谢谢大虾给出实例,收藏了。
2011-02-18 08:39
bardon
Rank: 2
等 级:论坛游民
帖 子:22
专家分:16
注 册:2011-1-16
收藏
得分:0 
谢谢大虾rjsp指点,那教材是2000年出版的《面向对象程序设计》全国计算机及应用专业自考教材,真没想到。说实在话,边学就边感到教学内容联系实际不够,错误多多,不便自学,也许是教材陈旧之故,故现在明显感觉到不好,坚持学完后再找本好教材继续学习。

[ 本帖最后由 bardon 于 2011-2-18 12:16 编辑 ]
2011-02-18 11:52
快速回复:求助:一句使用友元函数的语句编译通不过。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.046329 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved