C ++ перегружает << снова - PullRequest
       11

C ++ перегружает << снова

0 голосов
/ 15 февраля 2011

Так что мой код компилируется нормально - однако он не выполняет то, на что я надеялся :(.

Я постараюсь объяснить это как могу -

Ниже мой код, который пишетв файл на диске.

void NewSelectionDlg::PrintInfoFile()
{
     **CProductListBox b;**
     ofstream outdata;
     outdata.open("test.dat", ios::app); // opens the file & writes if not there.  ios:app - appends to file
     if( !outdata ) 
     { // file couldn't be opened
      cerr << "Error: file could not be opened" << endl;
      exit(1);
     }

     outdata << m_strCompany << endl;
     outdata << m_strAppState << endl;
     outdata << m_strPurpose << endl;
     outdata << m_strChannel << endl;
     outdata << m_strProductName << endl;
     **outdata << b << endl;**
     outdata << endl;
     outdata.close();
     return;
}

Ключевые строки, которые меня интересуют, выделены жирным шрифтом. Я хочу распечатать класс CProductListBox. Теперь, когда это не строка, и т. д. Я знаю, что мне нужно перезаписатьпокататься на <<, чтобы иметь возможность сделать это. Так что мой класс для CProductListBox выглядит следующим образом: </p>

class CProductListBox : public CListBox
{
    DECLARE_DYNAMIC(CProductListBox)

public:
    CProductListBox();
    virtual ~CProductListBox();
    **friend std::ostream& operator<< (std::ostream& o, const CProductListBox& b) 
         {
        return o;        
    }** 

Я снова выделил то, что считаю важным - к сожалению, ничего не печатается в выходном файлеесли бы я надеялся, что он напечатает contenets того, что есть в b (класс CProductList).

Может кто-нибудь увидеть что-то глупое, что я могу пропустить - Большое спасибо,

Колли (Ирландия)

Ответы [ 3 ]

4 голосов
/ 15 февраля 2011

Ваш оператор << не содержит кода, пытающегося что-либо напечатать. </p>

friend std::ostream& operator<< (std::ostream& o, const CProductListBox& b) 
{
  o << b.SomeMember << b.AnotherMember;
  return o;        
}
1 голос
/ 15 февраля 2011

Тебе звонят operator<<, но он ничего не делает. Он просто возвращает поток.

Если вы хотите, чтобы он записывал данные в поток, вам нужно написать код для записи данных в поток.

0 голосов
/ 15 февраля 2011

Чтобы это работало, вам нужно ввести код в

friend std::ostream& operator<< (std::ostream& o, const CProductListBox& b) 
{
    return o;        
} 

Что-то вроде этого напишет "имя" b (при условии, что b имеет getName (), который возвращает std :: string) каждый раз, когда вы пишете "b" в ostream.

friend std::ostream& operator<< (std::ostream& o, const CProductListBox& b) 
{
    o << b.getName();
    return o;        
} 
...