あるクラスオブジェクトを別のクラスオブジェクトで使用する際に問題があります。問題は、私のsoapserver.cpp関数でLNK2019エラーが発生したことです。しかし、最初にまず最初に。ここで別のクラスのC++ Qtクラスオブジェクト
は、私はまた別のクラスへの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;
}
レッツ・ジャンプで定義set_deliveredきています私の最初のクラス
//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;
};
のヘッダである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;
}
私は、クラスオブジェクトで何か愚かなことをしていますが、私は今や紛失しています。事前にお手伝いしてくれてありがとう!
EDITは:私の.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
あなたが持っている問題は何かをmysoapserver.cppするには追加する必要がありますか? –
mysoapserver.cppの 'LNK2019 here'(未解決の外部シンボル)は解決策が必要だと思います。 – user3188346
porjectファイルを表示します。 DataLayerモジュールをプロジェクトにリンクして作業する必要があります。 2 DataLayer.cppを完全に表示する – VladimirLenin