C++ 纯虚拟类没有名为的成员

C++ 纯虚拟类没有名为的成员,c++,c++11,C++,C++11,我想创建一个数据持久性级别,所以我创建了一个纯虚拟类IDbAdapter,它提供了一些函数。之后,我开发了一个类MySQLAdapter,它派生IDbAdapter并实现所有纯虚拟函数。 这是代码: IDB适配器.h #ifndef IDBADAPTER_H #define IDBADAPTER_H #include <Message.h> class IDbAdapter { public: IDbAdapter() {}; virtual ~IDbAdapt

我想创建一个数据持久性级别,所以我创建了一个纯虚拟类IDbAdapter,它提供了一些函数。之后,我开发了一个类MySQLAdapter,它派生IDbAdapter并实现所有纯虚拟函数。 这是代码: IDB适配器.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在数据库实例上执行查询并返回代码错误。 问题是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函数上遇到了这个错误:“IDbAdapter”类没有名为insertMessage的成员 问题出在哪里?

您的错误可能是类“IDbAdapter”没有名为insertMessageOUT的成员


这是因为IDbAdapter::insertMessageOUT不存在。

idba->insertMessageOUT?返回idba->insertMessageOUTm;IDbAdapter中没有成员函数insertMessageOUT。您引用的错误文本为insertMessage,但insertdb中的插入调用为insertMessageOUT,它不存在。你确定你准确地引用了那个错误文本吗?对不起,我的错误。我编辑了这个问题。编译错误是准确的。非常感谢。