我在使用模板运算符时遇到了一些问题<< 有代码:
class Manager
{
multiset<Advertising*, CompareAddPtr > AddToSend;
LinkedList<Client > ClientList;
LinkedList<Client > ActiveClientList;
list<string> initList;
list<string> commandsList;
}
在这个课程中我尝试使用这个方法:
void Manager:: PrintAllClientDetialsTofile()
{
ofstream myfile;
myfile.open ("Result.txt",ios::app);
myfile << ClientList;
myfile << "\n";
myfile.close();
}
我的&lt;&lt;模板类中的函数:
template <class L> ostream & operator<<(ostream& os,const LinkedList<L>& listToprint)
{
Link<T> * tmp = listToprint->pm_head;
for(int i=0;i<listToprint.GetNumOfElements();i++)
{
os<<*(tmp->m_data);
tmp=tmp->m_next;
}
return os;
}
我也有模板类
template <class T> class Link {
private:
T* m_data;
Link* m_next;
Link* m_prev;
客户端类:
#pragma once
#ifndef _CLIENT_H_
#define _CLIENT_H_
#include <string>
#include <set>
#include "Advertising.h"
#include "Email.h"
#include "FaceBook.h"
#include "Msn.h"
#include "Sms.h"
#include "Bill.h"
#include <ostream>
#include "LinkedList.h"
using namespace std;
struct CompareAddPtrClient : public std::binary_function<Advertising*, Advertising*, bool>
{
bool operator()(Advertising* x, Advertising* y) const
{
if(x->GetMadeOrderTime()<y->GetMadeOrderTime())
return true;
else
return false;
}
};
class Client
{
string m_clientname;
string m_companyName;
string m_cod;//check if have length of 15
string m_telephone;
string m_email;
int m_lastOrder;
int m_orderUntill;
multiset<Advertising*, CompareAddPtrClient > m_clientsAdds;
LinkedList<Bill > BillsForClient;
public:
Client(string clientName,string companyName,string cod,string telephone,string email);
Client(string clientName);
~Client(void);
//getters
LinkedList<Bill >* GetClientsBills(){return &BillsForClient;}
const string GetTelephoneNum()const {return m_telephone;}
const string GetEmail()const{return m_email;}
const int GetClientUntill()const{return m_orderUntill;}
const int GetLastOrderTime()const{return m_lastOrder;}
//setters
void UpdateLastTimeMadeOrder(int theday){m_lastOrder=theday;}
void UpdateOrderUntill(int theday){m_orderUntill=theday+7;}
//functions
friend ostream & operator<<(ostream& os,const Client& print);
bool operator==(const Client & other)const;
void PrintOrdersForClient()const;
void AddAdvertuseForClient(Advertising * add);
void LastOrdersByClient();
void PrintClientsBills();
};
#endif
当我使用此函数打印我的列表时,我得到编译错误:
错误C2593:'operator&lt;&lt;'是 暧昧
我发现了被问到的类似问题 the question 但我不明白如何解决这个问题。
谢谢你:)答案 0 :(得分:3)
“operator <<
不明确”是因为编译器找到了2(或更多)&lt;&lt;您的输入类型(在这种情况下为输出流和链接列表)适用的运算符。编译器有两个函数,其中任何一个函数都可以调用,并且它不知道应该选择哪个函数。
但是,您发布的代码并没有向我们展示足够的信息,而且它本身似乎没有任何可能导致此消息的内容。 (此错误通常来自多个代码相互作用的代码,而不是来自代码中的任何一个位置。)通常,编译器会跟踪该错误消息,告诉您哪个运算符&lt;