今朝ハマったこと
今朝ハマったこと。
クラスの定義に関数outputLogMessage()を追加しました。
classt LogMessage : public QMessageBox
{
// normal log message
void outputLogMessage(PHASE_ID id, const QString text);
private:
QTextStream *logFileStream;
};
クラスの実装ファイル(.cpp)に定義をコピーして、中身を書きました。
// normal log message
void outputLogMessage(PHASE_ID id, const QString text)
{
(*logFileStream) << phaseName[id] << text << endl << flush;
}
makeしましたが、errorになりました。
logmessage.cpp: In function 'void brynhildr::outputLogMessage(brynhildr::PHASE_ID, QString)': logmessage.cpp:168:5: error: 'logFileStream' was not declared in this scope (*logFileStream) << phaseName[id] << text << endl << flush; ^ Makefile.Debug:2295: recipe for target 'debug/logmessage.o' failed mingw32-make[1]: *** [debug/logmessage.o] Error 1 mingw32-make[1]: Leaving directory 'D:/home/masaaki/Src/qtbrynhildr/src' Makefile:48: recipe for target 'debug' failed mingw32-make: *** [debug] Error 2
「logFileStreamという変数が見つからないよ」と言われます。
何度見返しても、logFileStreamという変数は定義してあります。綴りも合っています。
答えは、エラーメッセージ内に書かれていました。
void brynhildr::outputLogMessage(brynhildr::PHASE_ID, QString)
です。関数outputLogMessage()がグローバルな関数になっています。
正しくはvoid brynhildr::LogMessage::outputLogMessage()になるはずです。
つまり、以下のように書く必要がありました。コピ&ペーストするとこんなこともありますね…
クラスに属さない関数なのですから、クラス内の変数にアクセスできるはずがありません。
// normal log message
void LogMessage::outputLogMessage(PHASE_ID id, const QString text)
{
(*logFileStream) << phaseName[id] << text << endl << flush;
}
朝から疲れました…
« QStringからconst char *を取得する | トップページ | テクノロジープレビューという名の人柱作戦 »
« QStringからconst char *を取得する | トップページ | テクノロジープレビューという名の人柱作戦 »
コメント