ошибка C2593: «оператор <<» неоднозначен - PullRequest
1 голос
/ 01 января 2011

У меня есть некоторые проблемы с оператором шаблона << с кодом: </p>

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();
}

my << функция в классе шаблона: </p>

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: 'оператор <<' является неоднозначный </p>

я нашел похожий вопрос, который был задан вопрос но я не понимаю, как решить эту проблему.

спасибо:)

1 Ответ

3 голосов
/ 01 января 2011

«operator << является неоднозначным» - это ошибка, возникающая из-за того, что компилятор нашел 2 (или более) операторов <<, к которым относятся ваши типы ввода (в данном случае выходной поток и связанный список). Компилятор имеет две функции, каждую из которых можно вызывать, и он не знает, какую из них выбрать. </p>

Ваш опубликованный код, однако, не показывает нам достаточно, чтобы сказать вам больше, и, по-видимому, сам по себе не имеет ничего, что могло бы вызвать это сообщение. (Эта ошибка обычно возникает из-за нескольких частей кода, действующих друг против друга, а не из какой-либо одной части кода.) Обычно за этим сообщением об ошибке следует компилятор, сообщающий вам, какой из двух операторов <

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...