我正在尝试编写一个游戏中有砖块的小游戏。
我的问题是我希望在轨道类中有一个砖块矢量,但我需要在砖类中保留一个指向轨道的指针。
我想要做的是有两个头文件track.h和brick.h,我想在brick.h文件中包含track.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的单个.h文件。
您能解释一下这是什么问题,我该如何解决?
答案 0 :(得分:3)
你可以做前瞻声明:
#pragma once
class brick;
class track
{
public:
private:
vector<brick> brickPositions; //This might not compile, should be a pointer
};
但是你需要有cpp文件。
track.cpp:
class brick
{
public:
brick (track &theTrack);
private:
track *mTrack;
};
brick::brick(track &theTrack)
{
mTrack = &theTrack;
}
反过来(在类砖之前向前声明跟踪),因为你只使用指针来跟踪类砖。
P.S。接受以下答案:)
答案 1 :(得分:2)
由于brick
类只有指向track
类的指针,因此可以使用前向声明。
#pragma once
class track;
class brick
{
public:
brick (track &theTrack);
private:
track *mTrack;
};
brick::brick(track &theTrack)
{
mTrack = &theTrack;
}
您无需更改track
课程。