2011-06-23 7 views
0

私は、約700 Mbのtxtログ出力ファイルを生成するrellly長いプロセスを持っています。これは管理が非常に難しいです。だから私は、複数の小さなログファイルで出力を分割したい。これは私のmain.cppにはQt extern変数を使用してコンパイルするときの問題

#include <QtGui/QApplication> 
#include "mineedit.h" 
#include "logoutput.h" 
#include <iostream> 

void messageHandling(QtMsgType type, const char *msg){ 

if (ERRORLOGGER.isEmpty()){ 
    ERRORLOGGER = DEFERRORLOGGER; 
} 

std::cout << "In Message Handling" << std::endl; 
std::cout << "Writing to file" << ERRORLOGGER.toStdString() << std::endl; 

QFile file(ERRORLOGGER); 
file.open(QFile::Append); 
QTextStream stream(&file); 
switch (type) { 
case QtDebugMsg: 
    stream << msg << "\n"; 
    file.close(); 
    break; 
case QtWarningMsg: 
    stream << "WARNING: " << msg << "\n"; 
    file.close(); 
    break; 
case QtCriticalMsg: 
    stream << "CRITICAL: " << msg << "\n"; 
    file.close(); 
    break; 
case QtFatalMsg: 
    stream << "FATAL: " << msg << "\n"; 
    file.close(); 
    abort(); 
}  
} 

int main(int argc, char *argv[]) 
{ 
ERRORLOGGER = DEFERRORLOGGER; 
qInstallMsgHandler(messageHandling); 
QApplication a(argc, argv); 
MineEdit w; 
w.show(); 
return a.exec(); 
} 
[/CODE] 

のように見えるものであると私logoutput.hは私が私のコードの一部で今

#ifndef LOGOUTPUT_H 
#define LOGOUTPUT_H 

#include <QString> 

//----------------------------For outputting an error file------------------------------ 
#define   DEFERRORLOGGER    "/home/aarelovich/Documents/log.err" 
#define   FOLDER_OUTPUT_LOG   "./home/aarelovich/Documents" 
extern QString ERRORLOGGER; 

#endif // LOGOUTPUT_H 

のようなものです: ERRORLOGGER = name_of_current_log_file。

私は、次のコンパイルエラーを取得しかし: OBJ/main.o:機能messageHandling(QtMsgType, char const*)': /home/aarelovich/Dropbox/MineSim/main.cpp:8: undefined reference toでERRORLOGGER ' /home/aarelovich/Dropbox/MineSim/main.cpp:9:ERRORLOGGER' /home/aarelovich/Dropbox/MineSim/main.cpp:13: undefined reference to ERRORLOGGERへの未定義参照' /ホーム/ aarelovich/Dropbox/MineSim/main.cpp:15:未定義参照ERRORLOGGER' obj/main.o: In functionメイン ': /home/aarelovich/Dropbox/MineSim/main.cpp:40:未定義参照ERRORLOGGER' obj/mineedit.o:/home/aarelovich/Dropbox/MineSim/mineedit.cpp:101: more undefined references to ERRORLOGGER'に従う collect2:ldが1の終了ステータスを返しました

誰でも私が間違っていると教えてください。または、アプリケーションログを作成する出力ファイルをどのように動的に変更できますか?

ありがとうございました

答えて

3

あなたの問題はおそらくextern変数に関連しています。

Hereは、C++でexternキーワードを使用する方法の例です。

リンク時にC++とCがexternキーワードと異なる点に注意してください。

あなたが何をする必要があるか

Basicallがある

global.cpp:

// declaration of g_nValue 
int g_nValue = 5; 

main.cppに:あなたはextern QString ERRORLOGGER;をで使用している場合、あなたの例では

// extern tells the compiler this variable is declared elsewhere 
    extern int g_nValue; 

    int main() 
    { 
     g_nValue = 7; 
     return 0; 
    } 

logoutput.h,この変数はリンクで説明されているように別のcppで宣言する必要があります。

こちらがお役に立てれば幸いです。

+0

ありがとうございました!その仕事。ここに私がしたことがあります。私は変数ERRORLOGGERをとり、main.cpp、Alaのglobal.cppの例でエラーメッセージ機能の上に通常宣言しました。それで私がしていることは、私がexternを使ってそれを再宣言するのを使用したいときです。それはそれです。 – aarelovich

関連する問題