c++ - 命名空间被视为类型

标签 c++ c++11 namespaces cmake

我有两个文件 Collider.h 和 Collidable.h,组织方式如下:

Folder 1:
----Collider.h
----Folder 2:
--------Collidable.h

文件内容如下: Collidable.h

#pragma once


#include "../Collider.h"

namespace nsInterfaces
{
    class Collidable
    {

    public:
        nsEngine::Collider * col {nullptr};
    public:
        virtual bool collides (const Collidable & other) const noexcept = 0;
        virtual ~Collidable () { delete col; }

    };
}



typedef std::unique_ptr<nsInterfaces::Collidable>   uptCollidable;
typedef std::shared_ptr<nsInterfaces::Collidable>   sptCollidable;
typedef std::vector<sptCollidable>                  CollidableVector;

Collider.h

#pragma once

#include "../Utility/Typedef.hpp"
#include "../Utility/GameException.h"

#include "Movement.h"

namespace nsEngine
{
    class Collider
    {
    /**/
    private:
    public:

        Collider () {}
        virtual ~Collider () noexcept {}

        virtual Collider * clone () noexcept = 0;
    protected:
        float x;
        float y;
        /**/
    };
}

正如您所料,我正在为自己开发一款游戏,但我不断遇到同样的错误:

error: 'nsEngine' does not name a type
     nsEngine::Collider * col {nullptr};
     ^

当然错误:“col”未在此范围内声明

我正在使用 cmake 和 mingw w64(我相信是 GCC 4.9.1)。我知道我可能无法提供足够的信息,所以请问我!

感谢阅读。

最佳答案

我试图在我的环境(Windows/Visual studio)下重现你的问题,但我没有遇到这个问题。我遇到的唯一错误是一些 Impossible to open the source file ../Collider.h 如果它不在构建路径中(即使 collidable.h 是),在这种情况下,同样的 'ncEngine' does not name a type 错误。

我确实注意到您使用当前文件的相对路径包含所有文件。例如:../Utility/GameException.h...为什么不使用与项目根目录相关的路径并包含如下文件:

#include "Engine/collider.h"
#include "Engine/Interface/collidable.h"
#include "Utility/GameException.h"

这可能无法解决您的问题,但它在我的 Win/Visual 环境中确实如此,并且(在我看来)使代码更易于理解。

关于c++ - 命名空间被视为类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33055053/

相关文章:

c++ - 是否可以在单个命令中存储 8 个字节

c++ - 为什么这会在控制台中返回一个地址?

C++11:GCC 4.8 静态 thread_local std::unique_ptr 未定义引用

networking - 无法在 ubuntu 18.04 上运行多个 dnsmasq dhcp 服务器

c++ - 保护 COM 接口(interface)免受异常影响

C++11 numeric_limits<long>::min() 的abs();

c++ - 保证 char、wchar_t、char16_t、char32_t 的大小排序

c# - 为什么我收到错误 CS0246 : The type or namespace name could not be found?

vb.net - 如何将类添加到自定义命名空间?

c++ - protobuf 生成的文件中缺少函数