2016-04-23 46 views
-1

我在使用另一个类对象时遇到问题。问题是 - 我在我的soapserver.cpp函数中有LNK2019错误。但首先是第一件事。另一个类中的C++ Qt类对象

这里是

//datalayer.h 
#include <QObject> 
#include <QSqlDatabase> 
#include <QSqlQuery> 
#include <QSqlError> 
#include <QVariant> 

class DataLayer : public QObject 
{ 
    Q_OBJECT 
public: 
    bool set_delivered(const QString& UCID, const QString& Key, QVariant &result); 
    explicit DataLayer(QObject *parent = 0); 
    QString getLastError() const{return lastError;} 

private: 
    QString lastError; 

}; 

我也set_delivered在CPP

//datalayer.cpp 
DataLayer::DataLayer(QObject *parent) : QObject(parent) 
{ 
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","DB"); 
    //db.databaseName(); 
    //db.hostName(); 
    //db.userName(); 
    //db.password(); 

    q = new QSqlQuery(db); 
    //q->prepare(""); //not implemented yet 
} 

DataLayer::~DataLayer() 
{ 
    QSqlDatabase db = QSqlDatabase::database("DB",false); 
    if(db.open()) 
    { 
     db.close(); 
    } 
    QSqlDatabase::removeDatabase("DB"); 
} 
bool DataLayer::set_delivered(const QString &UCID, const QString &Key, QVariant &result) 
{ 
    result.clear(); 
    QSqlDatabase db = QSqlDatabase::database("DB",false); 
    if(!db.open()) 
    { 
     lastError = db.lastError().text(); 
     return false; 
    } 
    q->prepare("INSERT INTO ActiveCall VALUES(:UCID,:Time,NULL,NULL,:Key)"); 
    q->bindValue(":UCID",UCID); 
    q->bindValue(":Time",QTime::currentTime().toString("HH:mm:ss:zzz")); 
    q->bindValue(":Key",Key); 
    if(!q->exec()) 
    { 
     lastError = q->lastError().text(); 
     return false; 
    } 
    q->next(); 
    result = q->value("Time").toString(); 
    db.close(); 
    return true; 
} 

让我们跳向另一个类中定义我的第一类的头,mysoapserver

//mysoapserver.h 
#include "soap/soapKursWebService.h" 
#include "soap/soapH.h" 
#include <QObject> 
#include <QSqlQuery> 
#include <qdebug.h> 
#include "datalayer.h"// I'm including datalayer header here 

class MySOAPServer : public QObject, public KursWebService 
{ 
    Q_OBJECT 

public: 
    MySOAPServer(QObject* parent = 0); 
    int delivered(int UCID, int DeviceNum, int &result); 
private: 
    DataLayer* r;// creating of the class object 

}; 

而且,主要部分,此类的cpp

//mysoapserver.cpp 
int MySOAPServer::delivered(int UCID, int DeviceNum, int &result)//вызов доставлен, но трубку не снял, в табличку время начала 
{ 
    qDebug()<<"delivered "<<UCID<<" "<< DeviceNum; 
    QVariant res = 0; 
    QString UCID_S = QString::number(UCID); 
    QString Key_S = QString::number(DeviceNum); 
    bool ok = r->set_delivered(UCID_S,Key_S,res);//LNK2019 here 
    if(!ok) 
     result = r->getLastError().toInt();//magicly works here 
    else 
     result = res.toInt(); 
    return SOAP_OK; 
} 

我知道,我对类对象做了一些愚蠢的事情,但我现在已经失去知觉了。预先感谢您的帮助!

编辑:加入我的.pro文件和我的datalayer.cpp

亲文件:如果有一点点的信息

#------------------------------------------------- 
# 
# Project created by QtCreator 2016-04-19T02:23:22 
# 
#------------------------------------------------- 

QT  += core gui network sql 

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

TARGET = Server_MVSC_Kurs_III 
TEMPLATE = app 
DEFINES += WITH_PURE_VIRTUAL 
INCLUDEPATH += \ 
    C:/Qt/gsoap-2.8.15/gsoap/ 

SOURCES += main.cpp\ 
     mainwindow.cpp \ 
    ipcserver.cpp \ 
    mysoapserver.cpp \ 
    soap/soapC.cpp \ 
    soap/soapKursWebService.cpp \ 
    soap/stdsoap2.cpp \ 
    datalayer.cpp 

HEADERS += mainwindow.h \ 
    ipcserver.h \ 
    mysoapserver.h \ 
    soap/soapH.h \ 
    soap/soapKursWebService.h \ 
    soap/soapStub.h \ 
    soap/stdsoap2.h \ 
    soap/KursWeb.nsmap \ 
    datalayer.h 

FORMS += mainwindow.ui 
+1

什么是您所遇到的问题? –

+0

我认为mysoapserver.cpp中的'LNK2019 here'(未解析的外部符号)需要一个解决方案。 – user3188346

+0

显示您的项目文件。您应该将您的DataLayer模块链接到项目中才能使用。 2显示你的DataLayer.cpp完全 – VladimirLenin

回答

1

将是有益的,但还有什么?

我认为问题出在你的头文件上。

你必须把在mysoapserver.cpp文件:

#include "datalayer.h" 


并在mysoapserver.h头文件的说:

class DataLayer; 

说明:

Error Unresolved Symbol引用DataLayer对象,因为文件mysoapserver.cpp没有DataLayer甚至是一件事。至少根据您发布的内容mysoapserver.cpp

您还需要添加到mysoapserver.cpp

#include "mysoapserver.h" 
+0

。非常感谢你! –

+0

@Senso Hakai - 没问题。 Qt对于头文件来说很奇怪。谁知道为什么。 ;) – mike510a