错误C2593:'operator<<'很暧昧

时间:2011-01-01 08:59:37

标签: c++ templates operators

我在使用模板运算符时遇到了一些问题<< 有代码:

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 但我不明白如何解决这个问题。

谢谢你:)

1 个答案:

答案 0 :(得分:3)

operator <<不明确”是因为编译器找到了2(或更多)&lt;&lt;您的输入类型(在这种情况下为输出流和链接列表)适用的运算符。编译器有两个函数,其中任何一个函数都可以调用,并且它不知道应该选择哪个函数。

但是,您发布的代码并没有向我们展示足够的信息,而且它本身似乎没有任何可能导致此消息的内容。 (此错误通常来自多个代码相互作用的代码,而不是来自代码中的任何一个位置。)通常,编译器会跟踪该错误消息,告诉您哪个运算符&lt;