我正在編寫一個C++程序,我需要一些幫助來理解錯誤。ostream/ofstream繼承問題
默認情況下,我的程序打印到終端(標準輸出)。但是,如果用戶提供文件名,程序將打印到該文件。如果我正在寫入終端,我將使用std::cout
對象,而如果我正在寫入文件,我將創建並使用std::ofstream
對象。
但是,我不想不斷地檢查是否應該這樣寫入終端或文件。由於std::cout
和std::ofstream
對象繼承自std::ostream
類,我想我會創建一種print_output
函數,它接受std::ostream
對象。在調用這個函數之前,我會檢查我是否應該打印到文件中。如果是這樣,我將創建std::ofstream
對象並將其傳遞給打印功能。如果不是,我只需將std::cout
傳遞給打印功能。打印功能則不必擔心打印到的位置。
我認爲這是一個好主意,但我無法獲得編譯代碼。我在這裏創建了一個過度簡化的示例。這裏是代碼...
#include <fstream>
#include <iostream>
#include <stdio.h>
void print_something(std::ostream outstream)
{
outstream << "All of the output is going here\n";
}
int main(int argc, char **argv)
{
if(argc > 1)
{
std::ofstream outfile(argv[1]);
print_something(outfile);
}
else
{
print_something(std::cout);
}
}
...這裏是編譯時錯誤。
dhrasmus:Desktop standage$ g++ -Wall -O3 -o test test.c
/usr/include/c++/4.2.1/bits/ios_base.h: In copy constructor ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’:
/usr/include/c++/4.2.1/bits/ios_base.h:779: error: ‘std::ios_base::ios_base(const std::ios_base&)’ is private
/usr/include/c++/4.2.1/iosfwd:55: error: within this context
/usr/include/c++/4.2.1/iosfwd: In copy constructor ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’:
/usr/include/c++/4.2.1/iosfwd:64: note: synthesized method ‘std::basic_ios<char, std::char_traits<char> >::basic_ios(const std::basic_ios<char, std::char_traits<char> >&)’ first required here
test.c: In function ‘int main(int, char**)’:
test.c:15: note: synthesized method ‘std::basic_ostream<char, std::char_traits<char> >::basic_ostream(const std::basic_ostream<char, std::char_traits<char> >&)’ first required here
test.c:15: error: initializing argument 1 of ‘void print_something(std::ostream)’
任何想法爲什麼我得到這些錯誤?我是否編寫了錯誤的代碼,或者我的方法存在根本性錯誤?
謝謝!
哇,這很簡單。謝謝! –