真的让我很紧张。这段代码之前运行得很好,我重新启动了IDE (Visual 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_UICONTEXTMage/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 ==========我已经不知道了。希望你们在StackOverflow能一如既往地帮助我。你们看到了我发誓的一切,所以我才这么爱你们。
发布于 2012-08-17 18:06:20
在Mage/GUI/UIContext.h中,您包含了" Mage/GUI/Frame.h“,之后在Mage/GUI/Frame.h中包含了"Mage/GUI/UIContext.h”。
这就是为什么您得到这些errors.You至少应该更改其中的一个包含,而且应该是好的。
发布于 2012-08-17 18:12:14
回答我自己的问题: UIContext的一种方法是寻找不存在的类Mage::GUI::Frame。框架类的构造函数正在寻找UIContext,它也不存在。在包含头之前添加类的原型可以解决这个问题。
https://stackoverflow.com/questions/12010826
复制相似问题