我正在尝试编写一个轨道上有积木的小游戏。
我的问题是我想在轨道类中有一个砖 block vector ,但我需要在砖 block 类中保留一个指向轨道的指针。
我试图做的是拥有两个头文件 track.h 和 brick.h,我想将 track.h 包含在 brick.h 文件中,反之亦然。
brick.h:
#pragma once
#include "track.h"
class brick
{
public:
brick (track &theTrack);
private:
track *mTrack;
};
brick::brick(track &theTrack)
{
mTrack = &theTrack;
}
track.h:
#pragma once
#include "brick.h"
class track
{
public:
private:
vector<brick> brickPositions;
};
但是这会导致编译错误。
我不为这些类使用 .cpp 文件,只是一个顶部带有 #pragma once 的 .h 文件。
您能解释一下问题是什么吗?我该如何解决?
最佳答案
你可以做前向声明:
#pragma once
class brick;
class track
{
public:
private:
vector<brick> brickPositions; //This might not compile, should be a pointer
};
但是你需要有cpp文件。
跟踪.cpp:
class brick
{
public:
brick (track &theTrack);
private:
track *mTrack;
};
brick::brick(track &theTrack)
{
mTrack = &theTrack;
}
反过来做(在类 brick 之前转发声明轨道),因为您只使用指针在类 brick 中进行跟踪。
附言接受下面的答案:)
关于c++ - 如何在 C++ 中交叉包含类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18849261/