我想创建一个数据持久性级别,因此我创建了一个提供某些功能的纯虚拟类IDbAdapter。之后,我开发了一个MySQLAdapter类,它派生了IDbAdapter并实现了所有纯虚函数。
这个代码:
IDbAdapter.h
#ifndef IDBADAPTER_H
#define IDBADAPTER_H
#include <Message.h>
class IDbAdapter
{
public:
IDbAdapter() {};
virtual ~IDbAdapter() {};
virtual int insertMessage( Message *msg ) = 0;
}
MySQLAdapter.h
#ifndef MYSQLADAPTER_H
#define MYSQLADAPTER_H
#include <IDbAdapter.h>
#include <Database.h>
#include <Message.h>
class MySQLAdapter : public IDbAdapter
{
public:
MySQLAdapter( Database *db );
virtual ~MySQLAdapter();
int insertMessage( Message *msg );
private:
Database *_db;
}
MySQLAdapter.cpp实现insertMessage()在Database实例上执行查询并返回代码错误。 问题是main.cpp看起来像这样:
#include <iostream>
#include <IDbAdapter.h>
#include <MySQLAdapter.h>
#include <Message.h>
#define db_host "tcp://127.0.0.1"
#define db_username "user"
#define db_password "pwd"
#define db_name "test"
using namespace std;
using namespace sql;
int insertdb(IDbAdapter *idba)
{
MQTTMessage *m = new MQTTMessage("CIAO","CIAOCIAO");
return idba->insertMessage(m);
}
int main()
{
Database *db = new Database( db_host, db_username, db_password, db_name );
MySQLAdapter *dba = new MySQLAdapter( db );
MQTTMessage *m = new MQTTMessage("Message1","Hi All");
int result = DB_ERROR;
result = insertdb(dba);
cout << "Message inserted: " << result << endl;
delete m;
delete dba;
delete db;
return EXIT_SUCCESS;
}
MySQLAdapter.cpp和Database.cpp在名为libmydb.so的共享库中编译。
现在,编译时我在insertdb()函数上有这个错误:
&#34; class&#39; IDbAdapter&#39;没有名为insertMessage&#34;
的成员
问题在哪里?
答案 0 :(得分:1)
您的错误可能是class 'IDbAdapter' has no member named insertMessageOUT
。
那是因为IDbAdapter::insertMessageOUT
不存在。