Qt使用extern变量编译的问题

时间:2011-06-23 20:26:13

标签: qt compiler-errors extern

我有一个很长的过程,可以产生大约700 Mb的txt日志输出文件。这很难管理。所以我想将输出分成多个较小的日志文件。这就是我的main.cpp看起来像

#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'的未定义引用 /home/aarelovich/Dropbox/MineSim/main.cpp:15:对ERRORLOGGER' obj/main.o: In function main'的未定义引用: /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退出状态

任何人都可以告诉我,我做错了什么?或者我如何动态更改我在其中创建应用程序日志的输出文件?

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

您的问题可能与外部变量有关。

Here是如何在c ++中使用extern关键字的示例。

请注意,链接时C ++和C与extern关键字有所不同。

Basicall你需要做的是

<强> global.cpp:

// declaration of g_nValue
int g_nValue = 5;

<强> main.cpp中:

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

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

在您的示例中,如果您在 logoutput.h 中使用extern QString ERRORLOGGER;, 这个变量需要在另一个cpp中声明,正如链接中所解释的那样。

我希望这会有所帮助