课堂范围有问题

nat*_*ill 0 c++ berkeley-db

我有一个名为Streamer的课程.这是Streamer.h

class Streamer {

public:
    Streamer(const MyDb& realtimeDb);
    virtual ~Streamer(void);

private:
    virtual void    callback_1(T_UPDATE pUpdate);
    virtual void    callback_2(Q_UPDATE pUpdate);
};
Run Code Online (Sandbox Code Playgroud)

这是Streamer.cpp

Streamer::Streamer(const MyDb& realtimeDb) {
}

Streamer::~Streamer(void) {
}

void Streamer::callback_1(T_UPDATE pUpdate) {
    // I need to do something with pUpdate and realtimeDb here, like this:
    // Getting a cursor from db (works fine in main.cpp, but not in callback)
    Dbc *cursorp;
    realtimeDb.getDb().cursor(NULL, &cursorp, 0);
}

void Streamer::callback_2(Q_UPDATE pUpdate) {
    // I need to do something with pUpdate and realtimeDb here, like this:
    // Getting a cursor from db (works fine in main.cpp, but not in callback)
    Dbc *cursorp;
    realtimeDb.getDb().cursor(NULL, &cursorp, 0);
}
Run Code Online (Sandbox Code Playgroud)

Streamer有两种方法是来自API的回调.我不能改变这些参数.但是,我确实需要访问我传递给构造函数的数据库实例MyDb(我甚至这样做了吗?).这是我从main.cpp传递它的方式:

MyDb realtimeDb(databasePath, databaseName);
Streamer streamer(realtimeDb);
Run Code Online (Sandbox Code Playgroud)

当我尝试从其中一个回调中访问realtimeDb时,我得到:

error: 'realtimeDb' was not declared in this scope
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢!

mat*_*975 5

您需要在类中创建一个成员变量来存储在构造函数中传递它的引用.目前,您正在传递对该对象的const引用,但该类对它没有任何作用.您需要将MyDb对象的详细信息存储为成员变量.这可以是引用,const引用或指向实例的指针,MyDb但是您需要一些东西,以便您的类可以在创建后访问它.

就像是

class Streamer {

public:
   Streamer(const MyDb& Db);
   virtual ~Streamer(void);

private:
   const MyDb& realtimeDb;
   virtual void    callback_1(T_UPDATE pUpdate);
   virtual void    callback_2(Q_UPDATE pUpdate);
};
Run Code Online (Sandbox Code Playgroud)

然后构造函数将是

Streamer::Streamer(const MyDb& Db) 
     : realtimeDb(Db)                // initialise the reference here
{
}
Run Code Online (Sandbox Code Playgroud)

如果您愿意,也可以使用指针而不是引用,尽管您需要相应地修改成员变量