C2653:“GUI”:不是类或命名空间

Posted

技术标签:

【中文标题】C2653:“GUI”:不是类或命名空间【英文标题】:C2653: 'GUI' : is not a class or namespace 【发布时间】:2012-08-17 17:56:41 【问题描述】:

真的让我很紧张。这段代码之前工作得很好,我重新启动了 IDE (Visual Studio 2010),现在突然代码让我发疯了。错误日志很大,我不知道是什么原因造成的,因为代码似乎非常正确。

1>ClCompile:
1>  uicont.cpp
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2653: 'GUI' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2143: syntax error : missing ';' before '*'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

还有很多,但我认为这是导致错误的原因。这是问题最多的文件的源代码。

Mage/GUI/UIContext.h

#include <OGRE/OgreString.h>
#include <OGRE/OgreOverlay.h>
#include <OGRE/OgreOverlayManager.h>

#include <vector>

#include <Mage/GUI/Frame.h>

#ifndef __H_MAGE_UICONTEXT
#define __H_MAGE_UICONTEXT

namespace Mage 
    class UIContext 
    public:
        UIContext();
        ~UIContext();

        GUI::Frame* createFrame(Ogre::String, Ogre::Vector2, double, double);
        void        attachFrame(Ogre::OverlayContainer*);

    private:
        Ogre::Overlay*           m_Overlay;
        std::vector<GUI::Frame*> m_Frames;
    ;


#endif // __H_MAGE_UICONTEXT

Mage/GUI/Frame.h

#include <OGRE/OgreVector2.h>
#include <OGRE/OgreOverlayContainer.h>
#include <OGRE/OgreOverlayManager.h>
#include <OGRE/OgreString.h>

#include <Mage/GUI/UIContext.h>

#ifndef __H_MAGE_GUI_FRAME
#define __H_MAGE_GUI_FRAME

namespace Mage 
    namespace GUI 
        class Frame 
        public:
            Frame(Mage::UIContext*, Ogre::String, Ogre::Vector2, double, double);


        private:
            Ogre::OverlayContainer* m_Panel;
        ;
    


#endif // __H_MAGE_GUI_FRAME

我还包括了整个错误日志,但这似乎只是因为这部分失败了,所以一切都失败了。我什至没有碰过那个代码,它总是编译得很好。是否需要解决问题,我也会包括在内;不过这些文件很大。

1>------ Build started: Project: Mage3D, Configuration: Debug Win32 ------
1>Build started 17/08/2012 19:43:22.
1>InitializeBuildStatus:
1>  Touching "Debug\Mage3D.unsuccessfulbuild".
1>ClCompile:
1>  uicont.cpp
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2653: 'GUI' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2143: syntax error : missing ';' before '*'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): warning C4183: 'createFrame': missing return type; assumed to be a member function returning 'int'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(26): error C2653: 'GUI' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(26): error C2065: 'Frame' : undeclared identifier
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(26): error C2059: syntax error : '>'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(27): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(28): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(14): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(15): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(16): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2143: syntax error : missing ',' before ')'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(23): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(24): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(25): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(16): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(18): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(19): error C2039: 'UIController' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(19): error C2065: 'UIController' : undeclared identifier
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(19): error C2990: 'Ogre::Singleton' : non-class template has already been declared as a class template
1>          c:\users\jesse\documents\visual studio 2010\projects\mage3d\ogre3d\include\ogre\ogresingleton.h(65) : see declaration of 'Ogre::Singleton'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(22): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(23): error C3413: 'Mage::UIContext::UIController' : invalid explicit instantiation
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(37): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontroller.h(38): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(4): error C2039: 'UIController' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(4): error C2039: 'UIController' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(4): error C2065: 'UIController' : undeclared identifier
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(4): error C2955: 'Ogre::Singleton' : use of class template requires template argument list
1>          c:\users\jesse\documents\visual studio 2010\projects\mage3d\ogre3d\include\ogre\ogresingleton.h(65) : see declaration of 'Ogre::Singleton'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(6): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(7): error C2653: 'UIController' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(7): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(10): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(12): error C2653: 'UIController' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(12): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(13): error C2143: syntax error : missing ',' before ')'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(15): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(17): error C2653: 'UIController' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(17): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(19): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(21): error C2653: 'UIController' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(21): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(24): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(26): error C2653: 'UIController' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(26): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(37): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(39): error C2653: 'UIController' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(39): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(55): error C2143: syntax error : missing ',' before ')'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(67): error C2143: syntax error : missing ',' before ')'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(73): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(74): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(75): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\uicont.cpp(75): fatal error C1004: unexpected end-of-file found
1>  luagui.cpp
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2039: 'UIContext' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2039: 'UIContext' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2061: syntax error : identifier 'UIContext'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\luagui.cpp(76): warning C4244: 'argument' : conversion from 'lua_Number' to 'const Ogre::Real', possible loss of data
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\luagui.cpp(76): warning C4244: 'argument' : conversion from 'lua_Number' to 'const Ogre::Real', possible loss of data
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\luagui.cpp(77): error C2661: 'Mage::GUI::Frame::Frame' : no overloaded function takes 4 arguments
1>  frame.cpp
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2039: 'UIContext' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2039: 'UIContext' : is not a member of 'Mage'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2061: syntax error : identifier 'UIContext'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\gui\frame.cpp(4): error C2511: 'Mage::GUI::Frame::Frame(Mage::UIContext *,Ogre::String,Ogre::Vector2,double,double)' : overloaded member function not found in 'Mage::GUI::Frame'
1>          c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(16) : see declaration of 'Mage::GUI::Frame'
1>  context.cpp
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2653: 'GUI' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C2143: syntax error : missing ';' before '*'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(21): warning C4183: 'createFrame': missing return type; assumed to be a member function returning 'int'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(26): error C2653: 'GUI' : is not a class or namespace name
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(26): error C2065: 'Frame' : undeclared identifier
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(26): error C2059: syntax error : '>'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(27): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\uicontext.h(28): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(14): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(15): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(16): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(18): error C2143: syntax error : missing ',' before ')'
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(23): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(24): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\mage3d\include\mage\gui\frame.h(25): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\ogre3d\include\ogre\ogrepixelformat.h(34): error C2143: syntax error : missing ';' before ''
1>c:\users\jesse\documents\visual studio 2010\projects\mage3d\ogre3d\include\ogre\ogrepixelformat.h(43): error C2143: syntax error : missing ';' before ''
... snip, just more of these errors ...
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:11.44
========== Build: 0 succeeded, 1 failed, 3 up-to-date, 0 skipped ==========

嗯,我不知道了。希望 *** 的各位能像往常一样帮助我。你们看到了我发誓的一切,这就是我如此爱你们的原因。

【问题讨论】:

ps:我知道头文件包含它们自己,我修复了它。不会改变或解决问题。 没关系,对它进行排序...在包含似乎修复它之前添加我的类的原型。我后来意识到了这一点。 让你的#include 保护在文件中如此低而不靠近顶部似乎很奇怪。 我通常不喜欢在标头保护中包含包含,假设每个标头也都有自己的标头,这并不重要。 但是为什么在不需要的时候处理#includes? 【参考方案1】:

在 Mage/GUI/UIContext.h 中包含“Mage/GUI/Frame.h”,然后在 Mage/GUI/Frame.h 中包含“Mage/GUI/UIContext.h”。

这就是您收到这些错误的原因。您至少应该更改其中一个包含,它应该没问题。

【讨论】:

这不是原因,原因是缺少原型。 添加标头保护并没有解决问题,我必须定义类原型。我仍然会接受你的回答,因为你至少部分正确。 我在A.h 中遇到了类似的问题,我包含了B.h,在B.h 中我包含了A.h。我删除了#include 之一,问题消失了。 A.h 依赖于 B.h,而不是我在 B.h 文件中删除了 #include "A.h"【参考方案2】:

回答我自己的问题:UIContext 的一个方法正在寻找不存在的 Mage::GUI::Frame 类。 Frame 类的构造函数正在寻找也不存在的 UIContext。在包含标题之前添加类的原型解决了这个问题。

【讨论】:

这只是隐藏了问题。另一个答案有正确的诊断。

以上是关于C2653:“GUI”:不是类或命名空间的主要内容,如果未能解决你的问题,请参考以下文章

尽管编辑了我的包含语句以修复,但得到“错误 C2653:'TextureManager':不是类或命名空间名称”

窗体头文件中的“错误 C2653:系统不是类或命名空间名称”,Visual C++

调用opencv时,使用Egien工具出现“error C2061: 语法错误: 标识符“Matrix””和“error C2653: “Eigen”:不是类或命名空间名称”该如何解决?

C# - 如何检查 C# 中是不是存在命名空间、类或方法?

不是类或命名空间名称

模板 typedef 不是类或命名空间名称