我有两个文件 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/