如何跨C ++包含类?

时间:2013-09-17 11:58:03

标签: c++ class oop pointers header-files

我正在尝试编写一个游戏中有砖块的小游戏。

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

我想要做的是有两个头文件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文件。

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

2 个答案:

答案 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课程。