複雑なロジックを持つオブジェクトを提供する C++ ライブラリがあります。データ処理中、このオブジェクトは多くのものを std::cout に出力します (これは現在ハードコーディングされています)。処理出力を標準出力ではなく、customm ウィジェット (一部のテキスト表示) に出力したいと考えています。クラスメンバーを作成しようとstd::ostreamし、パラメーターで設定しました(コンソールアプリケーションの std::cout および GUI アプリケーション内で処理される他の ostream )。しかし、コンパイラは次のエラーをスローします:
[ 14%] CXX オブジェクトのビルド src/core/CMakeFiles/PietCore.dir/pvirtualmachine.cpp.o
/usr/include/c++/4.6/ostream: コンストラクター 'PVirtualMachine::PVirtualMachine(QString)':
/usr/include/c++/4.6/ostream:363:7: エラー: 'std::basic_ostream::basic_ostream() [with _CharT = char, _Traits = std::char_traits]' は保護されています
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.cpp:33:50: エラー: このコンテキスト内
/usr/include/c++/4.6/ios:45:0 からインクルードされたファイルで、
/usr/include/c++/4.6/ostream:40 から、
/usr/include/c++/4.6/iterator:64 から、
/usr/include/qt4/QtCore/qlist.h:50 から、
/usr/include/qt4/QtCore/qvector.h:48 から、
/usr/include/qt4/QtGui/qpolygon.h:45 から、
/usr/include/qt4/QtGui/qmatrix.h:45 から、
/usr/include/qt4/QtGui/qtransform.h:44 から、
/usr/include/qt4/QtGui/qimage.h:45 から、
/usr/include/qt4/QtGui/QImage:1 から、
/home/tomasz/Development/C++/piet/src/core/pcodepointer.h:17 から、
/home/tomasz/Development/C++/piet/src/core/pblockmanager.h:9 から、
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.h:10 から、
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.cpp:4 から:
/usr/include/c++/4.6/bits/ios_base.h: メンバ関数 'std::basic_ios& std::basic_ios::operator=(const std::basic_ios&)':
/usr/include/c++/4.6/bits/ios_base.h:791:5: エラー: 'std::ios_base& std::ios_base::operator=(const std::ios_base&)' は非公開です
/usr/include/c++/4.6/bits/basic_ios.h:64:11: エラー: このコンテキスト内
/usr/include/c++/4.6/iterator:64:0 からインクルードされたファイルで、
/usr/include/qt4/QtCore/qlist.h:50 から、
/usr/include/qt4/QtCore/qvector.h:48 から、
/usr/include/qt4/QtGui/qpolygon.h:45 から、
/usr/include/qt4/QtGui/qmatrix.h:45 から、
/usr/include/qt4/QtGui/qtransform.h:44 から、
/usr/include/qt4/QtGui/qimage.h:45 から、
/usr/include/qt4/QtGui/QImage:1 から、
/home/tomasz/Development/C++/piet/src/core/pcodepointer.h:17 から、
/home/tomasz/Development/C++/piet/src/core/pblockmanager.h:9 から、
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.h:10 から、
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.cpp:4 から:
/usr/include/c++/4.6/ostream: メンバー関数 'std::basic_ostream& std::basic_ostream::operator=(const std::basic_ostream&)':
/usr/include/c++/4.6/ostream:57:11: 注: 合成されたメソッド 'std::basic_ios& std::basic_ios::operator=(const std::basic_ios&)' がここで最初に必要です
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.cpp: メンバー関数内 'void PVirtualMachine::setOutput(std::ostream)':
/home/tomasz/Development/C++/piet/src/core/pvirtualmachine.cpp:216:11: 注: 合成されたメソッド 'std::basic_ostream& std::basic_ostream::operator=(const std::basic_ostream&)' が最初に必要ですここ
よくわからないので誰か教えていただけると嬉しいです...
私のコードは次のようになります。
- .h ファイル
クラス PVirtualMachine {
プライベート:
std::ostream 出力;
[...]
公衆:
void setOutput(std::ostream);
[...]
};
- .cpp ファイル
void PVirtualMachine::setOutput(std::ostream os)
{
出力 = OS;
}