我正在用c ++开发一个项目,我不知道出了什么问题。我写了4个课程,一切看起来都很好(在visual studio 2010下)。 VS'看到了'所有的定义,我可以使用自动填充和清除,但是当我尝试编译项目时,它很容易失明。这就像我没有包含标题或其他东西(我做过)。奇怪的是在VS上使用这些类是没有问题的(我可以使用ctrl + space来提示,属性和方法列表以及所有这些东西)但是当我尝试编译它时说“ClassName”不是一个类型。 以下问题的快速示例:
ProButton.cpp:
#include "ProButton.h"
using namespace pGUI;
ProButton::ProButton( ... )
: ProControl( ... )
{
...
}
ProButton.h:
#ifndef __PRO_BUTTON__
#define __PRO_BUTTON__
#include <string>
#include "ProControl.h"
namespace pGUI
{
class ProButton :
public pGUI::ProControl
{
public:
//attributes
...
public:
//methods
...
};
}
#endif
但是编译器说: 错误291错误C2653:'ProButton':不是类或命名空间名称 对于ProButton.cpp中的这一行:ProButton :: ProButton(...)
它还说: 错误23错误C2039:'ProControl':不是'pGUI'的成员 错误24错误C2504:'ProControl':基类未定义
以及整个项目的所有类似错误。我不知道出了什么问题。看起来我的VS破了:D
当然那些(......)意味着那里有代码,现在就不那么重要了。我可以将所有解决方案上传到有用的地方。
修改//
关于命名空间,所有头文件(类声明)都在命名空间中定义:
namespace pGUI{
class ProClass
{
};
}
这些类的所有定义(在ProClass.cpp中)都在使用:
using namespace pGUI;
一开始。
我认为问题在于包含文件的顺序。 我不知道应该怎么做。到目前为止,我有4个课程:
类ProGUI:
类ProContainer:
类ProControl:
类ProButton:
这些类也使用irrlicht库,我不知道在哪里包含它。
我在#include "ProGUI.h"
之前将它包含在我的主文件中。这也是主要的唯一包括。 ProGUI.h。
// EDIT 2 - &gt;解决
这是一个包含问题。我需要重新考虑我的包含顺序并添加一些前向声明。无论如何,这一切似乎都很奇怪,让我花了很多时间来解决这个问题。谢谢你的帮助。 :)
答案 0 :(得分:2)
您似乎正在使用以下声明:
using namespace pGUI;
在课堂宣言之前:
class ProControl
{
};
而不是使用以下方法:
namespace pGUI
{
class ProControl
{
};
}
using namespace
,因为它说使用命名空间。您需要使用namespace
关键字后跟大括号明确地添加名称空间!
答案 1 :(得分:1)
using namespace pGUI
通知编译器应该在pGUI命名空间中查找现有名称。
要在命名空间中声明或实现某些内容,您需要更具体。有两个:
namespace pGUI
{
ProButton::ProButton( ... ) : ProControl( ... )
{
...
}
}
或:
pGUI::ProButton::ProButton( ... ) : ProControl( ... )
{
....
}
就个人而言,我认为using namespace
使用{{1}}是一个懒惰的程序员黑客,完全打败了名称空间。但我离题了。 :)