读书人

qt 一个变量宣言引用 undefined refer

发布时间: 2013-01-11 11:57:35 作者: rapoo

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"下面的位置,所有函数之外。

读书人网 >QT开发

热点推荐