我希望C++在它们给出的消息上更具体一些。在下面的文档中引发以下错误
主文件
#ifndef main_h
#define main_h
//includes
#include <windows.h>
#include <commctrl.h>
#include <d3d9.h>
#include <fstream>
#include "capplication.h"
//constants
#define TITLE "D3D Tut 01: Create Window"
#define WINDOW_X 350
#define WINDOW_Y 320
//Button ID's
#define ID_START 1
#define ID_CANCEL 2
//globals
extern CApplication g_App;
//function prototypes
LRESULT CALLBACK WindowProcedure(HWND,UINT,WPARAM,LPARAM);
#endif
唯一可能引发此错误的头文件是capplication.h。在下面给出capplication.h
#ifndef capplication_h
#define capplication_h
#include"main.h"
class CApplication
{
public:
CApplication(void);
~CApplication(void);
void InitWindow(void);
void SaveSettings(void);
void LoadSettings(void);
void KillWindow(void);
inline bool GetWindowStatus(void)
{
return m_bRunningWindow;
}
inline HWND GetWindowHandle(void)
{
return m_hWindow;
}
inline void SetWindowStatus(bool bRunningWindow)
{
m_bRunningWindow = bRunningWindow;
}
private:
bool m_bRunningWindow;
HWND m_hWindow,
m_hBtnStart,
m_hBtnCancel,
m_hLblResolution,
m_hCbResolution,
m_hLblBackBuffer,
m_hCbBackBuffer,
m_hLblDepthStencil,
m_hCbDepthStencil,
m_hLblVertexProcessing,
m_hCbVertexProcessing,
m_hLblMultiSampling,
m_hCbMultiSampling,
m_hLblAnisotropy,
m_hCbAnisotropy;
DWORD m_dwWidth,
m_dwHeight,
m_dwVertexProcessing,
m_dwAnisotropy;
D3DFORMAT m_ColorFormat,
m_DepthStencilFormat;
D3DMULTISAMPLE_TYPE m_MultiSampling;
};
#endif
除此之外,我看到的唯一可疑的东西是第一个代码中给出的fstream。我确实有fstream.h
但是VC++无法识别它,所以我被告知删除h,然后我做到了。现在我可以解决这个错误了。我不知道这可能是什么。可能很明显
最佳答案
您有一个循环包含问题。 main.h包含capplication.h,然后capplication.h包含main.h。请记住,在C++中,包含是所包含 header 内容的字面复制和粘贴。发生的情况是,当main.h包含capplication.h时,再次使main.h进入的include语句发生在CApplication类的替代之前,因此,当第二次处理main.h时,行extern CApplication g_App
是在声明CApplication类之前到达。
capplication.h包含main.h并没有多大意义,因此您应该将capplication.h需要的所有内容从main.h中移出到单独的 header 中,然后同时包含main.h和capplication.h该标题。
供将来引用,消息“语法错误:缺少';' “在标识符之前”通常表示您要声明的变量类型尚未定义。