由於的std :: ofstream的從相同類型std::cout
繼承是的實例(的std :: ostream的)它們的接口是相同的,一些方法被添加到文件處理流,但除此之外它們可以互換。
有了上述說明,您需要的唯一一件事就是您實際上在兩種情況下實現功能,目前:(通過閱讀您的片段)您不是。
- 的的std :: ofstream的例如沒有任何環
- 評價的順序是不同的STD(因爲你不使用
()
):: ofstream的片斷
爲了確保您使用相同的實現沒有問題,如果你正在寫一個文件或標準輸出你可以換合作在一個函數中,使其接受std :: ostream的引用,如下面的代碼片段所示。
#include <iostream>
#include <fstream>
void
do_whatever (std::ostream& output_stream)
{
int letter[] = {
1,2,3,4,5,6,7,8,9,10,11,12,13,14,
15,16,17,18,19,20,21,22,23,24,25,26
};
for (int i =0; i < 26; ++i)
output_stream << (char) (letter[i] + 'A' - 1) << " ";
}
int
main (int argc, char *argv[])
{
std::ofstream file_stream;
file_stream.open ("file.txt");
do_whatever (file_stream);
do_whatever (std::cout);
}
咳咳。兩種情況的代碼都應該相同。事實並非如此。 (提示:括號很重要) – 2012-07-16 02:42:56
(第二條提示:「for」字條很重要)。 – 2012-07-16 02:44:14
此代碼處於如此糟糕的狀態,我拒絕去看看。請組織它並再次發佈。 – cybertextron 2012-07-16 04:23:56