私はC++プログラムを作成していますが、エラーを理解する助けが必要です。ostream/ofstream継承の問題
デフォルトでは、私のプログラムは端末(STDOUT)に出力します。ただし、ユーザーがファイル名を指定すると、プログラムはそのファイルに印刷します。私が端末に書いているのであれば、私はstd::cout
オブジェクトを使用しますが、ファイルに書き込む場合は、std::ofstream
オブジェクトを作成して使用します。
しかし、端末やファイルに書き込むことになっているかどうかを絶えず確認する必要はありません。 std::cout
とstd::ofstream
オブジェクトの両方がstd::ostream
クラスを継承しているので、私はstd::ostream
オブジェクトを受け入れるような種類のprint_output
関数を作成すると考えました。この関数を呼び出す前に、ファイルに出力するかどうかを確認します。もしそうなら、std::ofstream
オブジェクトを作成し、それをprint関数に渡します。そうでない場合は、単に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)’
なぜこれらのエラーが表示されますか?私は何か間違ったコードを書いていたのですか、私のアプローチに根本的に何か間違っていますか?
ありがとうございます!
うわー、それは簡単でした。ありがとう! –