gpt4 book ai didi

c++ - 类范围有问题

转载 作者:太空宇宙 更新时间:2023-11-04 15:24:32 25 4
gpt4 key购买 nike

我有一个名为 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);
};

这是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);
}

Streamer 有两个方法,它们是来自 API 的回调。我无法更改这些参数。但是,我确实需要访问传递给构造函数的数据库实例 MyDb(我这样做对吗?)。这就是我从 main.cpp 传递它的方式:

MyDb realtimeDb(databasePath, databaseName);
Streamer streamer(realtimeDb);

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

error: 'realtimeDb' was not declared in this scope

有什么想法吗?谢谢!

最佳答案

您需要在您的类中创建一个成员变量来存储您在构造函数中传递给它的引用。目前,您正在传递一个对该对象的 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);
};

那么构造函数将是

Streamer::Streamer(const MyDb& Db) 
: realtimeDb(Db) // initialise the reference here
{
}

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

关于c++ - 类范围有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11975197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com