errorC2679操作符重载,求诸位帮忙编译
errorC2679操作符重载,求各位帮忙编译
RT自己写了一个TIME类和SMSDATA类
TIME.h如下:
#ifndef _TIME_H
#define _TIME_H
#include <FSTREAM>
//#include <iostream>
#include <cstring>
using namespace std;
class TIME
{
private:
int hour;
int min;
int sec;
public:
bool operator== (const TIME& time)const;
bool operator< (const TIME& time)const;
friend ofstream& operator<< (ofstream& out, const TIME& time);
/*{
out << time.hour << ':' << time.min << ':' << time.sec;
return out;
}*/
friend ifstream& operator>> (ifstream& in, TIME& time);
/*{
in >> time.hour;
getchar(); //去掉输入格式(时:分:秒)的冒号
in >> time.min;
getchar();
in >> time.sec;
return in;
}*/
};
#endif
TIME.cpp如下:
#include "TIME.H"
#include <fstream>
//using namespace std;
bool TIME::operator== (const TIME& time)const
{
if(((this -> hour) == time.hour) && ((this -> min) == time.min) && ((this -> sec) == time.sec))
return true;
else
return false;
}
bool TIME::operator< (const TIME& time)const
{
if (this -> hour != time.hour)
{
return this -> hour < time.hour;
}
else if (this -> min != time.min)
{
return this -> min < time.min;
}
else
{
return this -> sec < time.sec;
}
}
ifstream& operator>> (ifstream& in, TIME& time)
{
in >> time.hour;
in.get(); //忽略文件流中下一个字符
//getchar();
in >> time.min;
in.get();
//getchar(); getchar()函数是从标准输入中读取数据,不能用来从文件流中读取
in >> time.sec;
return in;
}
ofstream& operator<< (ofstream& out, const TIME& time)
{
out << time.hour << ':' << time.min << ':' << time.sec;
return out;
}
SMSDATA.h如下:
#ifndef _SMSDATA_H
#define _SMSDATA_H
#include "TIME.H"
#include <FSTREAM>
//#include <iostream>
#include <string>
using namespace std;
class SMSDATA
{
private:
unsigned int day_id;
string send_nbr;
string acpt_nbr;
int send_nbr_oprt;
int acpt_nbr_oprt;
TIME send_time;
//string send_time; 不方便比较函数数值比较时间
public:
friend ofstream& operator<< (ofstream& out, const SMSDATA& smsdata)
{
out << smsdata.day_id << smsdata.send_nbr << smsdata.acpt_nbr
<< smsdata.send_nbr_oprt << smsdata.acpt_nbr_oprt << smsdata.send_time;
return out;
}
friend ifstream& operator>> (ifstream& in, SMSDATA& smsdata) //这里的SMSDATA& 不能是const引用,因为读入过程中改变了其值
{
in >> smsdata.day_id >> smsdata.send_nbr >> smsdata.acpt_nbr
>> smsdata.send_nbr_oprt >> smsdata.acpt_nbr_oprt >> smsdata.send_time;
return in;
}
bool operator< (const SMSDATA& tmp)const;
};
#endif
SMSDATA.cpp如下:
#include "SMSDATA.H"
//#include "TIME.H"
#include <fstream>
using namespace std;
ofstream& operator<< (ofstream& out, const TIME& time);
ifstream& operator>> (ifstream& in, TIME& time);
bool SMSDATA::operator< (const SMSDATA& tmp)const
{
return ((this -> send_time) < tmp.send_time);
}
/*ifstream& operator>> (ifstream& in, SMSDATA& smsdata) //重载的是>>结果复制过去忘改了还是<<了!!!检查了半天!
{
in >> smsdata.day_id >> smsdata.send_nbr >> smsdata.acpt_nbr
>> smsdata.send_nbr_oprt >> smsdata.acpt_nbr_oprt >> smsdata.send_time;
return in;
}
ofstream& operator<< (ofstream& out, const SMSDATA& smsdata)
{
out << smsdata.day_id << smsdata.send_nbr << smsdata.acpt_nbr
<< smsdata.send_nbr_oprt << smsdata.acpt_nbr_oprt << smsdata.send_time;
return out;
}*/
main函数.cpp如下:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include "SMSDATA.H"
#include "TIME.H"
using namespace std;
int main()
{
ifstream infile("e:\\C++\\MyProjects\\GraduationThesis\\tb_sms.txt");
ofstream outfile("e:\\C++\\MyProjects\\GraduationThesis\\result.txt");
ofstream outfile2("e:\\C++\\MyProjects\\GraduationThesis\\sort.txt");
//string str;
SMSDATA temp_smsdata;
vector<SMSDATA> smsdata;
vector<SMSDATA>::iterator iter;
if(infile.is_open())
{
if(outfile.is_open())
{
int i = 0;
while(i < 50)
{
//getline(infile, str);
//outfile << str << endl;
infile >> temp_smsdata;
smsdata.push_back(temp_smsdata);
outfile << temp_smsdata;
++i;
}
}
else
{
cout << "can't open the output file!" << endl;
return 1;
}
}
else
{
cout << "can't open the input file!" << endl;
return 1;
}
if (outfile2.is_open())
{
cout << "can't open the input file!" << endl;
return 1;
}
sort(smsdata.begin(), smsdata.end());
for (iter = smsdata.begin(); iter != smsdata.end(); ++iter)
{
outfile2 << *iter << endl;
}
infile.close();
outfile.close();
outfile2.close();
/*ifstream infile("e:\\C++\\MyProjects\\GraduationThesis\\test.txt");
ofstream outfile("e:\\C++\\MyProjects\\GraduationThesis\\result.txt");
TIME time1;
infile >> time1; //TIME类只重载了文件流,没重载标准输入输出流,所以用cin或cout读入读出TIME类对象会报错
outfile << time1;
infile.close();
outfile.close();*/
return 0;
}
在SMSDATA.cpp中提示错误“errorC2679”就是没有找到接受“TIME”类型的右操作数的运算符(或没有可接受的转换)
这里我就不懂了啊,我明明重载了TIME的输入输出<< 和>>啊,为啥这里不对呢?
可是当我把SMSDATA.cpp中提示错误的地方屏蔽掉,在main函数中
TIME time;
cin>>time;
cout <<time;
这样就一定问题都没有而且能正确的运行,请问是什么问题呢???是我哪里的编译链接过程搞错了吗?还是怎样?希望大侠们帮忙用编译器帮忙运行下,看是不是我的编译器问题【ps.我用的VS2013】~求大侠指教啊!谢谢了!!!
------解决思路----------------------
嘿嘿,你跑这又开一贴,原来是这样用,我给你两段代码体会一下吧
RT自己写了一个TIME类和SMSDATA类
TIME.h如下:
#ifndef _TIME_H
#define _TIME_H
#include <FSTREAM>
//#include <iostream>
#include <cstring>
using namespace std;
class TIME
{
private:
int hour;
int min;
int sec;
public:
bool operator== (const TIME& time)const;
bool operator< (const TIME& time)const;
friend ofstream& operator<< (ofstream& out, const TIME& time);
/*{
out << time.hour << ':' << time.min << ':' << time.sec;
return out;
}*/
friend ifstream& operator>> (ifstream& in, TIME& time);
/*{
in >> time.hour;
getchar(); //去掉输入格式(时:分:秒)的冒号
in >> time.min;
getchar();
in >> time.sec;
return in;
}*/
};
#endif
TIME.cpp如下:
#include "TIME.H"
#include <fstream>
//using namespace std;
bool TIME::operator== (const TIME& time)const
{
if(((this -> hour) == time.hour) && ((this -> min) == time.min) && ((this -> sec) == time.sec))
return true;
else
return false;
}
bool TIME::operator< (const TIME& time)const
{
if (this -> hour != time.hour)
{
return this -> hour < time.hour;
}
else if (this -> min != time.min)
{
return this -> min < time.min;
}
else
{
return this -> sec < time.sec;
}
}
ifstream& operator>> (ifstream& in, TIME& time)
{
in >> time.hour;
in.get(); //忽略文件流中下一个字符
//getchar();
in >> time.min;
in.get();
//getchar(); getchar()函数是从标准输入中读取数据,不能用来从文件流中读取
in >> time.sec;
return in;
}
ofstream& operator<< (ofstream& out, const TIME& time)
{
out << time.hour << ':' << time.min << ':' << time.sec;
return out;
}
SMSDATA.h如下:
#ifndef _SMSDATA_H
#define _SMSDATA_H
#include "TIME.H"
#include <FSTREAM>
//#include <iostream>
#include <string>
using namespace std;
class SMSDATA
{
private:
unsigned int day_id;
string send_nbr;
string acpt_nbr;
int send_nbr_oprt;
int acpt_nbr_oprt;
TIME send_time;
//string send_time; 不方便比较函数数值比较时间
public:
friend ofstream& operator<< (ofstream& out, const SMSDATA& smsdata)
{
out << smsdata.day_id << smsdata.send_nbr << smsdata.acpt_nbr
<< smsdata.send_nbr_oprt << smsdata.acpt_nbr_oprt << smsdata.send_time;
return out;
}
friend ifstream& operator>> (ifstream& in, SMSDATA& smsdata) //这里的SMSDATA& 不能是const引用,因为读入过程中改变了其值
{
in >> smsdata.day_id >> smsdata.send_nbr >> smsdata.acpt_nbr
>> smsdata.send_nbr_oprt >> smsdata.acpt_nbr_oprt >> smsdata.send_time;
return in;
}
bool operator< (const SMSDATA& tmp)const;
};
#endif
SMSDATA.cpp如下:
#include "SMSDATA.H"
//#include "TIME.H"
#include <fstream>
using namespace std;
ofstream& operator<< (ofstream& out, const TIME& time);
ifstream& operator>> (ifstream& in, TIME& time);
bool SMSDATA::operator< (const SMSDATA& tmp)const
{
return ((this -> send_time) < tmp.send_time);
}
/*ifstream& operator>> (ifstream& in, SMSDATA& smsdata) //重载的是>>结果复制过去忘改了还是<<了!!!检查了半天!
{
in >> smsdata.day_id >> smsdata.send_nbr >> smsdata.acpt_nbr
>> smsdata.send_nbr_oprt >> smsdata.acpt_nbr_oprt >> smsdata.send_time;
return in;
}
ofstream& operator<< (ofstream& out, const SMSDATA& smsdata)
{
out << smsdata.day_id << smsdata.send_nbr << smsdata.acpt_nbr
<< smsdata.send_nbr_oprt << smsdata.acpt_nbr_oprt << smsdata.send_time;
return out;
}*/
main函数.cpp如下:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include "SMSDATA.H"
#include "TIME.H"
using namespace std;
int main()
{
ifstream infile("e:\\C++\\MyProjects\\GraduationThesis\\tb_sms.txt");
ofstream outfile("e:\\C++\\MyProjects\\GraduationThesis\\result.txt");
ofstream outfile2("e:\\C++\\MyProjects\\GraduationThesis\\sort.txt");
//string str;
SMSDATA temp_smsdata;
vector<SMSDATA> smsdata;
vector<SMSDATA>::iterator iter;
if(infile.is_open())
{
if(outfile.is_open())
{
int i = 0;
while(i < 50)
{
//getline(infile, str);
//outfile << str << endl;
infile >> temp_smsdata;
smsdata.push_back(temp_smsdata);
outfile << temp_smsdata;
++i;
}
}
else
{
cout << "can't open the output file!" << endl;
return 1;
}
}
else
{
cout << "can't open the input file!" << endl;
return 1;
}
if (outfile2.is_open())
{
cout << "can't open the input file!" << endl;
return 1;
}
sort(smsdata.begin(), smsdata.end());
for (iter = smsdata.begin(); iter != smsdata.end(); ++iter)
{
outfile2 << *iter << endl;
}
infile.close();
outfile.close();
outfile2.close();
/*ifstream infile("e:\\C++\\MyProjects\\GraduationThesis\\test.txt");
ofstream outfile("e:\\C++\\MyProjects\\GraduationThesis\\result.txt");
TIME time1;
infile >> time1; //TIME类只重载了文件流,没重载标准输入输出流,所以用cin或cout读入读出TIME类对象会报错
outfile << time1;
infile.close();
outfile.close();*/
return 0;
}
在SMSDATA.cpp中提示错误“errorC2679”就是没有找到接受“TIME”类型的右操作数的运算符(或没有可接受的转换)
这里我就不懂了啊,我明明重载了TIME的输入输出<< 和>>啊,为啥这里不对呢?
可是当我把SMSDATA.cpp中提示错误的地方屏蔽掉,在main函数中
TIME time;
cin>>time;
cout <<time;
这样就一定问题都没有而且能正确的运行,请问是什么问题呢???是我哪里的编译链接过程搞错了吗?还是怎样?希望大侠们帮忙用编译器帮忙运行下,看是不是我的编译器问题【ps.我用的VS2013】~求大侠指教啊!谢谢了!!!
------解决思路----------------------
嘿嘿,你跑这又开一贴,原来是这样用,我给你两段代码体会一下吧
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class TIME
{
private:
int hour;
int min;
int sec;
public:
friend ofstream& operator<< (ofstream& out,const TIME& time);
friend ifstream& operator>> (ifstream& in,TIME& time);
};
ifstream& operator>> (ifstream& in,TIME& time)
{
in>>time.hour;
in>>time.min;
in>>time.sec;
return in;
}
ofstream& operator<< (ofstream& out,const TIME& time)
{
out<<time.hour<<':'<<time.min<<':'<<time.sec;
return out;
}
class SMSDATA
{
private:
unsigned int day_id;
string send_nbr;
string acpt_nbr;
int send_nbr_oprt;
int acpt_nbr_oprt;
TIME send_time;
public:
friend ofstream& operator<< (ofstream& out,const SMSDATA& smsdata);
friend ifstream& operator>> (ifstream& in,SMSDATA& smsdata);
};
ifstream& operator>> (ifstream& in,SMSDATA& smsdata)
{
in>>smsdata.day_id>>smsdata.send_nbr>>smsdata.acpt_nbr
>>smsdata.send_nbr_oprt>>smsdata.acpt_nbr_oprt;
in>>smsdata.send_time;
return in;
}
ofstream& operator<< (ofstream& out,const SMSDATA& smsdata)
{
out<<smsdata.day_id<<smsdata.send_nbr<<smsdata.acpt_nbr
<<smsdata.send_nbr_oprt<<smsdata.acpt_nbr_oprt;
out<<smsdata.send_time;
return out;
}
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class TIME
{
private:
int hour;
int min;
int sec;
public:
friend std::basic_ostream<char,std::char_traits<char>>& operator<< (std::basic_ostream<char,std::char_traits<char>>& out,const TIME& time);
friend std::basic_istream<char,std::char_traits<char>>& operator>> (std::basic_istream<char,std::char_traits<char>>& in,TIME& time);
};
std::basic_istream<char,std::char_traits<char>>& operator>> (std::basic_istream<char,std::char_traits<char>>& in,TIME& time)
{
in>>time.hour;
in>>time.min;
in>>time.sec;
return in;
}
std::basic_ostream<char,std::char_traits<char>>& operator<< (std::basic_ostream<char,std::char_traits<char>>& out,const TIME& time)
{
out<<time.hour<<':'<<time.min<<':'<<time.sec;
return out;
}
class SMSDATA
{
private:
unsigned int day_id;
string send_nbr;
string acpt_nbr;
int send_nbr_oprt;
int acpt_nbr_oprt;
TIME send_time;
public:
friend ofstream& operator<< (ofstream& out,const SMSDATA& smsdata);
friend ifstream& operator>> (ifstream& in,SMSDATA& smsdata);
};
ifstream& operator>> (ifstream& in,SMSDATA& smsdata)
{
in>>smsdata.day_id>>smsdata.send_nbr>>smsdata.acpt_nbr
>>smsdata.send_nbr_oprt>>smsdata.acpt_nbr_oprt>>smsdata.send_time;
return in;
}
ofstream& operator<< (ofstream& out,const SMSDATA& smsdata)
{
out<<smsdata.day_id<<smsdata.send_nbr<<smsdata.acpt_nbr
<<smsdata.send_nbr_oprt<<smsdata.acpt_nbr_oprt<<smsdata.send_time;
return out;
}