在类的头文件中使用#include
时,我在这里读了几个关于循环依赖的问题,例如:
//抱歉编辑了清楚的例子
File Car.h
#include "Wheel.h"
#include <vector>
class Car
{
std::vector<Wheel> wheels;
};
File Wheel.h
#include "Car.h"
class Wheel
{
Car* car;
};
由于两个类之间发生循环依赖性而发生编译错误。我的问题是,如果我在类Car的.cpp中使用#include "Wheel.h"
或在Wheel类的.cpp中使用#include "Car.h"
,问题就解决了。它不是循环依赖吗?
答案 0 :(得分:0)
//A.h #include "B.h" class A {} ////////////// //B.h #include "A.h" class B {}
显示的代码中没有循环依赖关系。两个课程都不依赖于另一个课程。 (但由于语法错误,代码无法编译。)
循环包括简单地表示尽管已经包含在顶部,但是一个标题不在另一个标题之前。这只是因为两者不能同时在另一个之前。如果首先包含的标题中定义的类取决于第二个包含的类,则会出现错误。
更新新示例:
在这种情况下,Car
取决于Wheel
的定义,Wheel
取决于Car
的声明。请注意,Wheel
不依赖于Car
的定义。它不需要知道什么类Car
,只是它是一个类。
我的问题是为什么如果我在类Car的.cpp中使用#include“Wheel.h”或者在类Wheel的.cpp中使用#include“Car.h”,问题就解决了。
这不正确,这不能解决问题。它可能会使问题消失,但程序仍然会出错。
正确的解决方案是在定义Wheel
之前包含Car
的定义,并在定义Car
之前声明Wheel
。像这样:
class Car;
class Wheel
{
Car* car;
};
class Car
{
std::vector<Wheel> wheels;
};