gpt4 book ai didi

c++ - 相互导入 C++

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:09 27 4
gpt4 key购买 nike

我知道这是一个反复出现的问题,但到目前为止我基本上只看到了答案“如果你有相互导入你做错了什么”。

这就是为什么我有更多的一般理解问题而不是与某些特定代码相关的问题。

好吧,举个例子。假设我有一个动态自动机的数据结构。自动机的状态是具有“转换”属性的结构。 “transitions”是一个动态链表。列表元素是具有 State 对象属性的结构...

所以:

// state.h
#include "transitionList.h"

State{
TransitionList transitions; // all transitions going out from this state
}

// tranistion.h
#include "state.h"

Transition{
Transition* next_transition; // the next transition in the TransitionList
State* successor; // a pointer to the next state in the automaton
}


// transitionList.h
#include "tranisiton.h"

TransitionList{
// *code* class for a linked list of transitions
}

所以我们有 state.h -> tranistion.h -> transitionList.h -> state.h -> ...

这显然是循环的……但是概念上的错误在哪里?从正式的角度来看,我不认为这是一个糟糕的布局。

请赐教:)

最佳答案

概念上没问题。它只是在物理上行不通,因为 C++ 没有物理模块系统。 #include 指令只是插入包含文件的拷贝,因此循环包含将产生无限长度的源流。

您需要按照编译器可以编译的特定顺序向编译器提供类,这种组合称为“翻译单元”。

如果你有一个类持有指向另一个尚未完全声明的类的指针,你必须“转发声明”它:

class State;

这个技巧允许其中一个类 header 不需要包含它持有指针的东西的完整定义,并打破循环。

关于c++ - 相互导入 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29180435/

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