gpt4 book ai didi

c++ - 这是循环依赖吗?我该如何解决?

转载 作者:行者123 更新时间:2023-11-28 02:56:00 25 4
gpt4 key购买 nike

我相信我遇到了循环依赖问题。我研究了其他答案,但我不明白如何使用前向声明来解决我的问题。

我有以下组成:

+------------------+
|Session <---------------+
| | |
| +------------+ | Must know
| |Dataset | | about
| | | | ^
| | | | |
| | +---------+
| | | |
| | | |
| +------------+ |
| |
+------------------+

从下面发布的代码中,您能发现任何循环依赖或问题吗?如有必要,我可以发布更多代码。这是一个复杂的系统,我试图将问题归结为最基本的部分。

session .h

#include "Dataset.h"

...

namespace bmd2 {

class Session {

private:
std::vector<std::shared_ptr<bmd2::Dataset>>
datasetContainer; // error here

数据集.h

#include "Session.h"  // when I include this line I get strange errors

namespace bmd2 {

class Dataset {

private:
bmd::Session & session;

当我让 Dataset 知道 Session 时,我遇到的一些错误是:

Session.h 命名空间 bmd2 中的数据集未命名类型

先试试

所以我尝试了这个:

数据集.h

// removed include
namespace bmd2 {

class Dataset {

class Session;

private:
bmd2::Session & session;

数据集.cpp

#include "Session.h"

bmd2::Dataset::Dataset(bmd2::Session & _session,
bmd2::Logger & _logger,
const std::string & filePath,
bmd2::File::FileMode fileMode)
: session(_session), logger(_logger)
{

我仍然得到:命名空间 bmd2 中的“ session ”未命名类型。这太令人沮丧了。

最佳答案

确实,您不能同时拥有两个标题。幸运的是,Dataset 不需要Session 的完整定义来声明对一个的引用;只需声明类(在其命名空间内):

class Session;

确保它在命名空间中;您的更新表明您已将其放入 Dataset 中,它在不同的范围内声明了不同的类。

关于c++ - 这是循环依赖吗?我该如何解决?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21980279/

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