Я хочу создать уровень сохранения данных, чтобы создать чистый IDb-адаптер виртуального класса, который предоставляет некоторые функции. После этого я разрабатываю класс 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():
"class 'IDbAdapter' не имеет имени с именем insertMessage"
Где проблема?
'idba-> insertMessageOUT'? – Mat
'return idba-> insertMessageOUT (m);' В 'IDbAdapter' нет функции-члена' insertMessageOUT'. – vincentp
Текст ошибки, который вы указали, говорит 'insertMessage', но вызов insert в' insertdb() 'is' insertMessageOUT() ', который не существует. Вы точно указали этот текст ошибки? – donjuedo