我希望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该标题。

供将来引用,消息“语法错误:缺少';' “在标识符之前”通常表示您要声明的变量类型尚未定义。

07-24 09:25