gpt4 book ai didi

C++ IS-A关系和头文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:47:15 29 4
gpt4 key购买 nike

我从 java 跳到 C++,同时我在 IS-A 关系和头文件方面遇到了一些麻烦。

我有 4 个类(class),爷爷、父亲、 child 和家,有 4 个头文件和 4 个源文件。grandpa(abstract class) -> father -> child,他们遵循IS-A关系。

父亲将使用家庭类中的方法(这意味着我已经在父亲类中初始化了一个家庭实例)。home 还将初始化 child 的实例。

在main函数中,我初始化了一个home的实例,使用在home中初始化的child来运行继承父类的方法。当我构建解决方案时,IDE 说未定义父基类。我确定我已经包含了不同文件所需的所有头文件。

最后,我找到了一个解决方案,我将父类和子类的头文件,以及源文件也结合起来。然后问题就解决了。

任何人都可以告诉我在我以前的情况下发生了什么吗?

father.h

# pragma once
#include "home.h"
class father
{
public:
virtual run(){home::instance()->run();};
}

Child.h

# pragma once
#include "father.h"
class child:public father
{
public:
virtual run(){father::run();};
}

home.h

# pragma once
#include "child.h"
class home
{
public:
void run(){std::cout<<"test";};
void run2(){g = new child(); g->run();};
private:
Grandapa g;
}

最佳答案

你有一个循环依赖,home.h 包括 child.h 其中包括 father.h 其中包括 home.h

您需要在某个头文件中进行前向声明。

http://www.parashift.com/c++-faq/forward-decl.html

关于C++ IS-A关系和头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20513342/

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