【问题标题】:C++ header guard not workingC ++标头保护不起作用
【发布时间】:2015-10-08 14:39:38
【问题描述】:

我试图让我的包含工作,但我尝试的一切都会导致错误。即使使用#pragma 一次也不起作用。你知道我做错了什么吗?

ma​​in.cpp

#include "utility/headers/Window.h"
#include "engine/headers/Player.h"
#include "engine/headers/Chunk.h"

ChunkManager.h

#ifndef CHUNK_MANAGER_H
#define CHUNK_MANAGER_H

#include "../../utility/headers/Vector3i.h"
#include "Chunk.h"
#include <map>
class ChunkManager{...}
#endif // CHUNK_MANAGER_H

Chunk.h

#pragma once
#ifndef CHUNK_H
#define CHUNK_H

#include <glm/glm.hpp>
#include "CubeCreator.h"
#include "ChunkManager.h"
#include "../../utility/headers/Random.h"
#include "../../utility/noise/headers/Noise.h"

class Chunk{...}
#endif // CHUNK_H

错误消息是 'ChunkManager' 没有被声明

提前致谢!

【问题讨论】:

  • 也缺少分号(即class X { ...};
  • 'ChunkManager' 尚未声明|
  • 这看起来不像包含警卫是问题所在。 MCVE 请。
  • 还有什么?不知道怎么回事!
  • 为什么需要#pragma once 和显式哈希保护?

标签: c++ header include guard


【解决方案1】:

由于上述技术在我的案例中不起作用,我定义了一个新的头文件,其中包含全局变量,如 chunkSize。也许只是不可能做我尝试过的事情。

但是对于那些可能会发现这个问题的人来说,这里是我的导入现在的样子:

ChunkManager.h

#include "Chunk.h"

Chunk.h

// no includes

ma​​in.cpp

#include "ChunkManager.h"

并且不再通过调用 ChunkManager::chunkSize 来访问 chunkSize,而是通过调用 Settings::chunkSize

【讨论】:

    【解决方案2】:

    #include "ChunkManager.h" 替换为class ChunkManager;

    这就是前向声明,解决了A类需要知道B类,B类需要知道A类的问题。

    取决于您在课堂 Chunk 中如何使用 ChunkManager。前向声明可能不起作用。

    【讨论】:

    • 感谢您的回答!这可能是解决方案,但不幸的是,我需要有关 Chunk.h 中的 const 静态变量的信息: private:int data[ChunkManager::chunkSize][ChunkManager::chunkSize][ChunkManager::chunkSize];
    • 也许另一种方式会起作用(即在 ChunkManager.h 中前向声明类 Chunk)。如果这也不起作用,请提供MCVE,如前所述。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 2020-04-30
    • 2013-11-17
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多