c++ - 如何在 C++ 中交叉包含类?

标签 c++ class oop pointers header-files

我正在尝试编写一个轨道上有积木的小游戏。

我的问题是我想在轨道类中有一个砖 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/

相关文章:

php - 使用命名空间从外部文件调用 PHP 类。

php - OOP 中的可变变量

javascript - javascript 中的关联数组

c++ - C++ 中二元谓词的求值

c++ - 在 Windows 上部署 QML 应用程序的正确方法

c++ - C++中的对象实例化方法

c++ - 类类型重定义错误

c++ - 在 C++ 11 中使用 free(const char *)

java - 使用 Jsoup 和 Java 选择 div 类标签

java - 如何访问私有(private)包类的公共(public)成员?