gpt4 book ai didi

c++ - c++上的循环依赖和继承编译错误

转载 作者:行者123 更新时间:2023-11-28 04:54:39 24 4
gpt4 key购买 nike

我在 C++ 中遇到一个涉及循环依赖和继承的问题。

我已经部分实现了设计,我将使用 pesudocode 来说明问题发生的位置。

第一部分是:

//app.h

include rel.h

class Rel; // forward declaration

class App {
shared_ptr<Rel> //member variable
}

//rel.h

include app.h

class App; //forward declaration

class Rel {
shared_ptr<App> //member variable
}

到这里,程序编译没有警告

然后,我想添加如下继承:

//app.h

include rel.h
include drel.h

class Rel; // forward declaration
class DRel // forward declaration

class App {
shared_ptr<Rel> //member variable
shared_ptr<DRel> //member variable
}

//rel.h (the same as before)

include app.h

class App; //forward declaration

class Rel {
shared_ptr<App> //member variable
}

//drel.h

include app.h
include rel.h

class App; //forward declaration

class DRel: Rel { // compile error here: expected class name before { token
shared_ptr<App> //member variable
}

如您所见,编译器抛出“expected class name before {token”,这意味着 Rel 未解析,但为什么第一个没有继承的代码有效而第二个没有?我该如何解决?这是一个“错误”的模式吗?

我正在使用 c++14

我知道有很多关于我遇到的问题的问题,但我找不到我的具体问题的答案。也许我没有看到它......

最佳答案

由于你声明的所有变量都不需要知道App、Rel和DRel占用的空间,你甚至不需要#include有问题的header,你只需要转发像您一样声明名称。

所以你有 .h

class A;
class B;

class C {
std::shared_ptr<A> ptra;
std::shared_ptr<B> ptrb;
};

然后是你的 .cpp

#include "A"
#include "B"

C::C() { ... }

关于c++ - c++上的循环依赖和继承编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47458765/

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