0

我正在尝试编写一个小游戏,其中赛道上有砖块。

我的问题是我想在轨道类中有一个砖向量,但我需要在砖类中保留一个指向轨道的指针。

我想要做的是有两个头文件 track.h 和brick.h,我想在brick.h 文件中包含track.h,反之亦然。

砖.h:

#pragma once

#include "track.h"

class brick
{
    public:
        brick (track &theTrack);
    private:
        track *mTrack;
};

brick::brick(track &theTrack)
{
    mTrack = &theTrack;
}

轨道.h:

#pragma once

#include "brick.h"

class track
{
    public:

    private:
        vector<brick> brickPositions;
};

但是,这会导致编译错误。

对于这些类,我不使用 .cpp 文件,只使用一个顶部带有 #pragma 的单个 .h 文件。

你能解释一下问题是什么,我该如何解决?

4

2 回答 2

3

您可以进行前向声明:

 #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;
    }

反过来做(在类砖之前前向声明轨道),因为您只使用指针来追踪类砖。

PS接受下面的答案:)

于 2013-09-17T12:01:25.727 回答
2

由于brick该类只有一个指向track该类的指针,因此您可以使用前向声明。

#pragma once

class track;

class brick
{
    public:
        brick (track &theTrack);
    private:
        track *mTrack;
};

brick::brick(track &theTrack)
{
    mTrack = &theTrack;
}

您无需更改track课程。

于 2013-09-17T12:10:11.837 回答