当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : operator << 的一个问题
帖子发表于 : 2007-08-07 23:57 
头像

注册: 2007-04-24 13:44
帖子: 216
送出感谢: 0 次
接收感谢: 0 次
代码:
/*我用operator << 的时候总是说Multiple markers at this line
                                - first defined here
                                - multiple definition of `operator<<(std::ostream&, Data&)'
在eclipse下写的程序.
具体代码是:
*/
//*****************************************************************************
//Data.cpp
#include<iostream>
using namespace std;

class Data
{
public:
   friend ostream& operator << (ostream&,Data&);
   Data()
   {
      num = 0;
      den = 0;
   }
   Data(int num,int den)
   {
      this->num = num;
      this->den = den;
   }
private:
   int num,den;
};
ostream& operator << (ostream& out,Data& data)
{
   out<<data.num<<"/"<<data.den<<"   ";
   return out;
}
//*****************************************************************************
//main.cpp
#include "Data.cpp"
//写不写#include <iostream>    using namespace std;  都一样报错
int main()
{
        Data hello(1,3);
        cout<<hello<<endl;
        return 0;
}

/*
而如果把main函数和Data类放在一起又没问题拉  谁能告诉我这是怎么一回事啊,我的程序不能把main和Data类放在一起啊.急啊.
*/


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2007-08-08 0:16 
头像

注册: 2005-10-25 11:15
帖子: 1016
送出感谢: 0 次
接收感谢: 1
Data.cpp中定义了operator <<,main.cpp中include了Data.cpp,也就是operator <<在main.cpp又定义了一遍。
于是link的时候发现有两个operator <<的定义。有两种办法解决这个问题:
1. 把Data.cpp从工程中去除,也就是不编译Data.cpp,只编译include了Data.cpp的main.cpp;
2. 把Data.cpp中声明和定义部分拆开分别放在Data.h和Data.cpp中,main.cpp只include Data.h。


_________________
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2007-08-08 0:27 
头像

注册: 2006-07-25 9:33
帖子: 223
送出感谢: 0 次
接收感谢: 0 次
代码:
/* data.h */
#ifndef DATA_H
#define DATA_H

#include <iostream>

class Data
{
    friend std::ostream& operator<<(std::ostream&, const Data&);
public:
    Data(int _num, int _den) : num(_num), den(_den) {}
    Data() : num(0), den(0) {}
private:
    int num, den;
};

#endif

代码:
/* data.cpp */
#include "Data.h"

std::ostream& operator<<(std::ostream& out, const Data& data)
{
    return out << data.num << "/" << data.den << " ";
}

代码:
/* main.cpp */
#include "Data.h"

int main()
{
    Data hello(1, 3);
    std::cout << hello << std::endl;
    return 0;
}


_________________
Take what man makes and use it, But do not worship it, For it shall pass. -- Anonymous

Twitter @jiangpeng


页首
 用户资料  
 
4 楼 
 文章标题 :
帖子发表于 : 2007-08-08 0:48 
头像

注册: 2007-04-24 13:44
帖子: 216
送出感谢: 0 次
接收感谢: 0 次
谢谢两位仁兄的 解释
问题解决拉
看来我还得好好的学习C++


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译