gpt4 book ai didi

c++ - 扩展类 c++ 的循环包含问题

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

你能想出如何解决这个循环包含问题吗?

C extends B and B includes A. A includes C. 我试过的每一个前向声明都没有用。

错误

错误 1 ​​error C2504: 'B': 基类未定义错误 2 error C3668: 'C::c' : 带有覆盖说明符 'override' 的方法没有覆盖任何基类方法

文件 A.h:

#pragma once

#include "C.h"

struct A
{
A();

C c;
};

文件 B.h:

#pragma once

#include "A.h"

struct A;

struct B
{
virtual void c() = 0;

A* a;
};

文件 C.h:

#pragma once

#include "B.h"

struct B;

struct C : public B
{
void c() override;
};

最佳答案

解决方案总是相同的,看起来您走在正确的轨道上。但是,您没有正确使用前向声明。应该有很多例子说明如何做到这一点,例如 here .

B.h

// Why are including "A.h" here, this is causing your circular include
// issue, it needs to be moved to your implementation (e.g., "B.cpp")
#include "A.h"

struct A; // Forward declaration, good

struct B
{
virtual void c() = 0;

A* a; // A pointer only requires the above forward declartion
};

C.h

#include "B.h" // Necessary since you're extending `B`

struct B; // This forward declaration is superfluous and should be removed

struct C : public B
{
void c() override;
};

关于c++ - 扩展类 c++ 的循环包含问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461325/

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