【发布时间】:2015-10-10 14:26:55
【问题描述】:
我有两个文件 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};
^
当然还有error: "col" was not declared in this scope
我正在使用 cmake 和 mingw w64(我相信 GCC 4.9.1)。我知道我可能没有提供足够的信息,所以问我!
感谢您的阅读。
【问题讨论】:
-
PS : 如果我把相关的两条线转换成 cmets,我的代码就会被构建。
-
老实说,问题似乎出在其余代码中。你可以尝试写
::nsEngine::Collider看看是否有帮助。 -
嗯,这并没有改变任何东西,值得一试。我尝试在我的 main.cpp 中创建一个“aaatest”类,并创建一个公共
nsEngine::Collider * a;成员变量,它可以工作......也许它必须看到“.. " 在包含... -
是的,这是我的第二个想法 - 包含其他文件。要测试这个理论,最简单的方法是将标题重命名为其他内容...
-
@AlanStokes 有一个好主意。在这种情况下,您可以尝试类似
class nsEngine::Collider * col {nullptr};
标签: c++ c++11 namespaces cmake