« QStringからconst char *を取得する | トップページ | テクノロジープレビューという名の人柱作戦 »

2014年6月17日 (火)

今朝ハマったこと

今朝ハマったこと。

クラスの定義に関数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 *を取得する | トップページ | テクノロジープレビューという名の人柱作戦 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/2011805/56527186

この記事へのトラックバック一覧です: 今朝ハマったこと:

« QStringからconst char *を取得する | トップページ | テクノロジープレビューという名の人柱作戦 »