QFile と QTextStream を使用して Logger クラスを作成しようとしていますが、効率的な方法が見つかりません。その中に log(...) 関数を作成したいだけです。
次のようにするとうまくいくことがわかっています。
void CLogger::log(QString strLog,int nType) {
QFile file(m_strFileName);
file.open( QIODevice::Append | QIODevice::Text );
QTextStream logStream(&file);
logStream << nType << "-" << strLog;
file.close();
}
しかし、それはかなり厄介です。挿入するログ行ごとに QFile オブジェクトを作成したくありません。
そのため、次のようないくつかの異なる方法を試しました。
1) (メンバーとして QFile *m_pFile を使用)
CLogger::CLogger()
{
m_pFile = new QFile(m_strFileName);
}
void CLogger::log(QString strLog,int nType)
{
m_pFile->open( QIODevice::Append | QIODevice::Text );
QTextStream logStream(m_pFile);
logStream << nType << "-" << strLog;
m_pFile.close();
}
また
2) (メンバーとして QFile *m_pFile および QTextStream *m_pLogStream を使用)
CLogger::CLogger()
{
m_pFile = new QFile(m_strFileName);
m_pFile->open( QIODevice::Append | QIODevice::Text );
m_pLogStream = new QTextStream(m_pFile);
}
void CLogger::log(QString strLog,int nType)
{
*m_pLogStream << nType << "-" << strLog;
}
最初のケースでは、次のようになります。
C2248: 'QTextStream::QTextStream': クラス 'QTextStream' で宣言されたプライベート メンバーにアクセスできません
2 つ目では、*m_pLogStream は QTextStream& と同等ではありません。
私は何を間違っていますか?