2011-02-15 104 views
0

所以我的代碼編譯正常 - 但它不是做什麼,我希望:(C++超載<<再次

生病嘗試,並解釋這是盡我所能 -

下面是我的代碼,被寫入到磁盤上的文件。

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。現在因爲這不是一個字符串,等我知道我必須高估乘坐< <爲了能夠做到這一點。所以我的班級CProductList盒看起來是這樣的:

class CProductListBox : public CListBox 
{ 
    DECLARE_DYNAMIC(CProductListBox) 

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

我又是什麼,我認爲加粗是很重要的 - 這是印刷沒事就輸出文件不幸被我希望它會打印什麼是B中的contenets(在CProductList類) 。

有人能看到一些愚蠢的事我可能會丟失 - 非常感謝,

Colly(愛爾蘭)

+7

你`運營商<<`沒有做任何事情;如果你想將數據寫入流,你需要編寫的代碼將數據寫入到流... – 2011-02-15 16:48:29

回答

1

operator<<獲取調用,但它不會做任何事情。它只是返回流。

如果你想讓它寫入數據流,你需要編寫的代碼將數據寫入到流。

4

您的運營< <不含試圖打印任何東西,任何代碼。

friend std::ostream& operator<< (std::ostream& o, const CProductListBox& b) 
{ 
    o << b.SomeMember << b.AnotherMember; 
    return o;   
} 
+0

感謝埃裏克 - 我想這也是工作,如果我有三個下拉列表的方式(我們會打電話給他們1,2,3) - 基於這些數據顯示在另一個框中(這是CProductListBox) - 可以說,如果選擇了1,2,3,則ABC將顯示。如果選擇2,1,3 BAC將顯示等等。所以我想要做的是返回此CProductListBox類的完整內容 - 是否可以做o << b;然後返回o?由於 – user617702 2011-02-16 14:13:36

0

對於這個工作,你需要在

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

像這樣的東西提供一些代碼,會寫B的「名」(假設1b具有的getName()返回一個的std :: string )每次你寫入「b」到ostream。

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

感謝埃德溫 - 我想這也是工作的方式是,如果我有三個下拉列表(我們會打電話給他們1,2,3) - 基於這些數據顯示在另一個盒子(這是CProductListBox) - 讓說如果選擇了1,2,3,則會顯示ABC。如果選擇2,1,3 BAC將顯示等等。所以我想要做的是返回此CProductListBox類的完整內容 - 是否可以做o << b;然後返回o?謝謝 – user617702 2011-02-16 14:13:07