【发布时间】:2011-03-07 02:40:41
【问题描述】:
我已经使用 C++ 工作了好几个星期了,但是头文件背后的机制(或者我想是链接器?)让我很困惑。我已经养成了创建一个“main.h”来对我的其他头文件进行分组并保持 main.cpp 整洁的习惯,但有时这些头文件抱怨无法找到不同的头文件(即使它已声明在“main.h”中)。我可能没有很好地解释它,所以这里是我正在尝试做的事情的精简版:
//main.cpp
#include "main.h"
int main() {
return 0;
}
-
//main.h
#include "player.h"
#include "health.h"
#include "custvector.h"
-
//player.h
#include "main.h"
class Player {
private:
Vector playerPos;
public:
Health playerHealth;
};
-
//custvector.h
struct Vector {
int X;
int Y;
int Z;
};
-
//health.h
class Health {
private:
int curHealth;
int maxHealth;
public:
int getHealth() const;
void setHealth(int inH);
void modHealth(int inHM);
};
我不会包含 health.cpp,因为它有点长(但确实有效),它确实有 #include "health.h"。
无论如何,编译器(Code::Blocks)抱怨“player.h”找不到“Health”或“Vector”类型。我认为如果我在“player.h”中使用#include "main.h",它将能够找到Health 和Vector 的定义,它们包含在“main.h”中。我想他们会以他们的方式走隧道(player.h -> main.h -> health.h)。但这并没有很好地工作。是否有某种图表或视频可以说明应该如何设置? Google 帮不上什么忙(对我的书也没有)。
【问题讨论】:
-
它没有回答您的问题,但您应该将 Vector 结构更改为其他名称。当您开始使用 std::vector 时,它会变得令人困惑,而且 3D 空间中的点无论如何都不是真正的向量。
-
谢谢,我会这样做的。你说得对,应该是点什么的。
-
其实一个向量就是由一个点来定义的。
-
不确定你的意思是什么蜘蛛侠。矢量具有大小和方向。一个点只是一些标量值,比如速度。它的矢量形式是速度。 en.wikipedia.org/wiki/Vector_(mathematics_and_physics)
-
@reuscam:N 维中所有点的空间同构于所有 N 维向量的空间。它点指定从原点到该点的向量,为您提供长度和方向。当然,许多人希望有一个向量位于某个点(即起点、长度和方向)。为此,您需要两点。