2016-04-23 9 views
-1

あるクラスオブジェクトを別のクラスオブジェクトで使用する際に問題があります。問題は、私の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 
+1

あなたが持っている問題は何かをmysoapserver.cppするには追加する必要がありますか? –

+0

mysoapserver.cppの 'LNK2019 here'(未解決の外部シンボル)は解決策が必要だと思います。 – user3188346

+0

porjectファイルを表示します。 DataLayerモジュールをプロジェクトにリンクして作業する必要があります。 2 DataLayer.cppを完全に表示する – VladimirLenin

答えて

1

は少しより多くの情報があった場合には有用であるが、そこにあるものからだろう...

私は問題があなたのヘッダーファイルであると思います。

#include "datalayer.h" 


とmysoapserver.hヘッダファイルPUTで:

class DataLayer; 

説明:

あなたはmysoapserver.cppファイルに配置する必要があり

未解決シンボルのエラーは、ファイルmysoapserver.cppにnoがあるため、DataLayerオブジェクトを参照しています。 DataLayerが単なるものであるという考え。少なくとも、あなたはmysoapserver.cpp

のために掲示内容に応じてまた

#include "mysoapserver.h" 
+0

を追加しました。どうもありがとうございました! –

+0

@Senso Hakai - 問題ありません。 Qtはヘッダファイルに関しては奇妙です。誰がその理由を知っている。 ;) – mike510a