2013-05-06 2 views
0

Привет У меня есть этот оператор ostream, который дает мне эту ошибку при компиляции: cannot access private member declared in class 'CService'C++ вопрос оператора ostream

вот мой код:

friend ostream& operator <<(ostream& os, CService &obj); 

ostream& operator<<(ostream &os, CService &obj) { 

os<<obj.m_strClient; 
return os; 

} 

Я попытался возвращение ostream&, но это не исправить проблема, вместо этого он добавляет другую ошибку syntax error : ';'

Вот весь мой код:

#include <iostream> 
#include <string> 
#include <fstream> 
#include <vector> 
#include <algorithm> 

using namespace std; 

class CService { 
private: 
    string m_strClient; 
    string m_strSeller; 
    int m_iMinutes; 

public: 
    CService() { 

     m_strClient="N/A"; 
     m_strSeller="N/A"; 
     m_iMinutes=0; 
    } 

    CService(string c, string s, int m) { 

     m_strClient=c; 
     m_strSeller=s; 
     m_iMinutes=m; 

    } 

    CService(const CService &obj) { 

     m_strClient=obj.m_strClient; 
     m_strSeller=obj.m_strSeller; 
     m_iMinutes=obj.m_iMinutes; 

    } 

    string GetClient() { 

     return m_strClient; 

    } 

    string GetSeller() { 

     return m_strSeller; 

    } 

    int GetMusic() { 

     return m_iMinutes; 

    } 

    CService CService::operator =(CService obj) { 

     m_strClient=obj.m_strClient; 
     m_strSeller=obj.m_strSeller; 
     m_iMinutes=obj.m_iMinutes; 
     return *this; 

    } 

    bool operator < (const CService &obj) const { 

     return m_strSeller<obj.m_strSeller; 

    } 

    CService CService::operator +(const CService &obj) const { 

     return CService(m_iMinutes+obj.m_iMinutes); 

    } 

    friend ostream& operator <<(ostream& os, CService &obj); 



    bool CService::operator==(CService &obj) { 

     return (obj.m_strSeller==m_strSeller); 

    } 
}; 

ostream& operator<<(ostream &os, CService &obj) { 

    os<<obj.m_strClient; 
    return ostream&; 

} 
+0

Можете ли вы предоставить некоторый контекст? Где у вас есть декларация 'friend'? –

+0

Использование класса ClassName :: MemberFunctionName внутри класса неверно. Поместите объявление в класс ('void foo();') и сделайте 'void ClassName :: foo() {}' вне класса или просто поместите определение в класс, не используя оператор разрешения области. – chris

+0

Если это действительно ваш весь код, и это заголовок, он должен включать в себя охранники. – chris

ответ

0

У вас есть много вопросов, основные проблемы были:

  • return os; вместо return ostream&;

  • Вы не конструктор, который принимает int: добавить CService(int m = 0)

  • Вы не должны добавлять CService:: в определении класса: удалить их

я исправил их (Live code) по крайней мере, это будет скомпилирован без ошибок:

class CService 
{ 
private: 
    string m_strClient; 
    string m_strSeller; 
    int m_iMinutes; 

public: 

    CService(int m = 0) 
    { 
     m_strClient = "N/A"; 
     m_strSeller = "N/A"; 
     m_iMinutes = m; 
    } 

    CService(string c, string s, int m) 
    { 
     m_strClient = c; 
     m_strSeller = s; 
     m_iMinutes = m; 
    } 

    CService(const CService &obj) 
    { 
     m_strClient = obj.m_strClient; 
     m_strSeller = obj.m_strSeller; 
     m_iMinutes = obj.m_iMinutes; 
    } 

    string GetClient() 
    { 
     return m_strClient; 
    } 

    string GetSeller() 
    { 
     return m_strSeller; 
    } 

    int GetMusic() 
    { 
     return m_iMinutes; 
    } 

    CService operator =(CService obj) 
    { 
     m_strClient = obj.m_strClient; 
     m_strSeller = obj.m_strSeller; 
     m_iMinutes = obj.m_iMinutes; 
     return *this; 
    } 

    bool operator<(const CService &obj) const 
    { 
     return m_strSeller < obj.m_strSeller; 
    } 

    CService operator +(const CService &obj) const 
    { 
     return CService(m_iMinutes + obj.m_iMinutes); 
    } 

    friend ostream& operator <<(ostream& os, CService &obj); 

    bool operator==(CService &obj) 
    { 
     return (obj.m_strSeller == m_strSeller); 
    } 
}; 

ostream& operator<<(ostream &os, CService &obj) 
{ 
    os << obj.m_strClient; 
    return os; 
} 
+0

У меня все еще есть ошибка «не могу получить доступ к частному члену» – solenoo

+0

Я добавил код в реальном времени, это невозможно, если вы не делаете что-то еще. – deepmax

+0

Я просто копирую/вставляю ваш код больше ничего – solenoo

Смежные вопросы