纯虚拟类没有成员命名

时间:2015-11-17 14:49:42

标签: c++ c++11

我想创建一个数据持久性级别,因此我创建了一个提供某些功能的纯虚拟类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;

的成员 问题在哪里?

1 个答案:

答案 0 :(得分:1)

您的错误可能是class 'IDbAdapter' has no member named insertMessageOUT

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