C++Qt 类对象位于另一个类中
C++Qt class object in another class
我在另一个类对象中使用一个类对象时遇到问题。问题是 - 我的 soap服务器.cpp 功能LNK2019错误。但首先要做的是。
这是我第一堂课的标题
//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;
};
我在 cpp 也有定义set_delivered
//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文件和数据层.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 文件中:
#include "datalayer.h"
并在 mysoapserver.h 头文件中放置:
class DataLayer;
解释:
错误未解析符号指的是数据层对象,因为文件 mysoapserver.cpp 不知道数据层甚至是一个东西。 至少根据你为MySoapServer发布的内容.cpp
您还需要添加到mysoapserver.cpp
#include "mysoapserver.h"
相关文章:
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 复制赋值函数如何访问另一个对象的私有成员(Stroustroup 原则和实践书)?
- 为什么数组中对象的析构函数在被另一个对象替换时不被调用?
- C++将带有重载构造函数的对象添加到另一个对象
- 如何将指针从unique_ptr传递到另一个对象并管理寿命
- 如何将"this"的生命周期移动到C++中的另一个对象中?
- 2 个 COM 对象,并在另一个对象中使用其中一个对象的接口
- 将列表的对象C++移动到另一个对象