2015-11-17 5 views
-3

Я хочу создать уровень сохранения данных, чтобы создать чистый 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"

Где проблема?

+1

'idba-> insertMessageOUT'? – Mat

+4

'return idba-> insertMessageOUT (m);' В 'IDbAdapter' нет функции-члена' insertMessageOUT'. – vincentp

+1

Текст ошибки, который вы указали, говорит 'insertMessage', но вызов insert в' insertdb() 'is' insertMessageOUT() ', который не существует. Вы точно указали этот текст ошибки? – donjuedo

ответ

1

Возможно, это ошибка class 'IDbAdapter' has no member named insertMessageOUT.

Это потому, что IDbAdapter::insertMessageOUT не существует.

Смежные вопросы