首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > QT开发 >

qt 一个变量宣言引用 undefined reference to

2013-01-11 
qt 一个变量声明引用 undefined reference to诸位老师好!有一个问题:IDE是qtCreator。 我定义了一个类LogUt

qt 一个变量声明引用 undefined reference to
诸位老师好!
   有一个问题:IDE是qtCreator。 我定义了一个类LogUtil,头文件如下LogUtil.h。


#ifndef LOGUTIL_H
#define LOGUTIL_H
#include <QDir>
#include "QsLog.h"

class LogUtil: public QObject
{
    Q_OBJECT
    public:        
        static QString getCurrentLogName(){return currentLogFileName ;}
        static void setCurrentLogName(QString fileName);
        static void createLogFile(QString fileName);
        static int getLogSize(QString fileName);
        static void log(QString dateTime,QString eventStatus,QString logMsg,QString connectDevice,QString DeviceIp,QString remark);
        
    private:
        LogUtil(){}
        static QString currentLogFileName;
};

#endif // LOGUTIL_H


源文件LogUtil.cpp

   #include <QObject>
#include "LogUtil.h"
#include "QsLog.h"
#include "QsLogDest.h"

void LogUtil::setCurrentLogName(QString fileName)
{
    LogUtil::currentLogFileName = fileName ;
}

int LogUtil::getLogSize(QString fileName){
    int size = 0;
    QFile file(fileName);

    if (!file.open(QIODevice::ReadOnly))
    {
        return 1;
    }

    size = file.size();
    file.close();
    return size;
}

void LogUtil::createLogFile(QString fileName)
{
    QsLogging::Logger& logger = QsLogging::Logger::instance();
    logger.setLoggingLevel(QsLogging::TraceLevel);
    //const QString sLogPath(QDir(Settings::SavePath()).path()+"/log/"+fileName);
    QString dirPath = "e:/upload";
    const QString sLogPath(QDir(dirPath.append("/log/")).path()+fileName);
    QsLogging::DestinationPtr fileDestination( QsLogging::DestinationFactory::MakeFileDestination(sLogPath) );
    QsLogging::DestinationPtr debugDestination(QsLogging::DestinationFactory::MakeDebugOutputDestination() );
    logger.addDestination(debugDestination.get());
    logger.addDestination(fileDestination.get());

    QString currentFileName = "e:/upload";
    currentFileName.append("/log/").append(fileName);
    setCurrentLogName(currentFileName);
}

void LogUtil::log(QString dateTime, QString eventStatus, QString logMsg, QString connectDevice, QString DeviceIp, QString remark)
{
    QLOG_INFO()<<" dateTime:" +dateTime +" eventStatus: " +eventStatus+" LogMsg: "+logMsg+" connentDevice: "+connectDevice+" DeviceIp: "+DeviceIp+" remark:"+remark;


}



编译的时候报如下错误:

release/moc_LogUtil.o  -L"c:\QtSDK\Desktop\Qt\4.7.4\mingw\lib" -lQtCore4 
release/LogUtil.o:LogUtil.cpp:(.text+0x9c): undefined reference to `LogUtil::currentLogFileName'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: Leaving directory `C:/Users/youjie/Desktop/log_example-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK____'
mingw32-make.exe[1]: *** [release\log_example.exe] Error 1
mingw32-make.exe: *** [release] Error 2
12:35:58: 进程"C:\QtSDK\mingw\bin\mingw32-make.exe"退出,退出代码 2 。
构建项目log_example 时发生错误 (目标: 桌面)
当执行构建步骤 'Make'时

不知何故,请诸位老师指点,多谢了。
[解决办法]
在.cpp里加入
QString LogUtil::currentLogFileName = "";
[解决办法]
引用:
在.cpp里加入
QString LogUtil::currentLogFileName = "";

+1
补充一下,建议写在#include "QsLogDest.h"下面的位置,所有函数之外。

热点排行