VC++ 编译器看不到我的任何命名空间或类



我正在用 c++ 做一个项目,我不知道出了什么问题。我已经写了 4 个类,在工作期间一切看起来都很好(在 Visual Studio 2010 下)。VS "看到"了所有定义,我可以使用自动填充和 sudgestions,但是当我尝试编译项目时,它突然失明了。就像我没有包含标题或其他东西(我做到了)。奇怪的是,在VS上使用这些类没有问题(我可以ctrl +空格提示,属性和方法列表以及所有这些东西),但是当我尝试编译时,它说"ClassName"不是一种类型。以下问题的快速示例:

专业按钮.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::P roButton( ... )

它还说:错误 23 错误 C2039:"ProControl":不是"pGUI"
的成员错误 24 错误 C2504:"ProControl":基类未定义

以及整个项目的所有类似错误。我不知道出了什么问题。看起来我的VS坏了:D

当然,这些(...)意味着那里有代码,只是现在并不那么重要。我可以将所有解决方案上传到某个地方,它会有所帮助。

编辑//

关于命名空间,所有头文件(类声明)都在命名空间中定义:

namespace pGUI{
   class ProClass
   {
   };
}

这些类的所有定义(在 ProClass.cpp 中)都使用:

using namespace pGUI;

一开始。

我认为问题在于包含文件的顺序。我不确定应该如何做到这一点。到目前为止,我有 4 节课:

类专业图形用户界面:

  • 有一个指向 ProContainer 的指针
  • 包括:ProContainer 和 ProControl

类专业容器:

  • 有指向以下位置的指针:ProGUI 和 ProControl

类 ProControl:

  • 有一个指向 ProContainer 的指针
  • 包括专业按钮
  • 是 ProButton 的基类

类专业按钮:

  • 是ProControl的一个子类

这些类也使用irrlicht库,我不确定在哪里包含它。我在#include "ProGUI.h"之前将其包含在我的主文件中。这也是主要内容中唯一的包含。普罗吉 .

编辑 2 -> 已解决

这是包含的问题。我需要重新考虑我的收录顺序并添加一些前瞻声明。无论如何,这一切看起来都很奇怪,花了我很多时间来弄清楚我。谢谢你的帮助。:)

您似乎使用以下语句:

using namespace pGUI;

就在类声明之前:

class ProControl
{
};

而不是使用以下方法:

namespace pGUI
{
    class ProControl
    {
    };
}

using namespace ,正如它所说,使用命名空间。您需要使用关键字后跟大括号显式放置namespace命名空间!

using namespace pGUI通知编译器它应该在 pGUI 命名空间中查找以解析现有名称。

要在命名空间中声明或实现某些内容,您需要更具体。 与以下任一:

namespace pGUI
{
    ProButton::ProButton( ... ) : ProControl( ... )
    {
        ...
    }
}

或:

pGUI::ProButton::ProButton( ... ) : ProControl( ... )
{
    ....
}

就我个人而言,我认为任何使用using namespace都是懒惰的程序员黑客,完全违背了命名空间的意义。 但我离题了。 :)

相关内容

最新更新