繁体   English   中英

错误C2146:语法错误:缺少';' 在标识符“ g_App”之前

error C2146: syntax error : missing ';' before identifier 'g_App'

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我希望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,然后我做到了。 现在我可以解决这个错误了。 我不知道这可能是什么。 可能很明显

3 个回复

您有一个循环包含问题。 main.h包含capplication.h,然后capplication.h包含main.h。 请记住,在C ++中,包含是所包含标头内容的字面复制和粘贴。 发生的情况是,当main.h包含capplication.h时,再次使main.h进入的include语句发生在CApplication类的替代之前,因此,当第二次处理main.h时,行extern CApplication g_App在声明CApplication类之前已到达extern CApplication g_App

capplication.h包含main.h并没有任何意义,因此您应该将capplication.h需要的所有内容从main.h中移出到单独的头文件中,然后同时包含main.h和capplication.h该标题。

为了将来提供参考,消息为“语法错误:缺少';'” “在标识符之前” 通常意味着您要声明的变量类型尚未定义。

extern CApplication g_App;  // missing ‘;’ before identifier ‘g_App’

这条线可能出什么毛病? 错误消息本身并不是特别容易解释,但是只有很少的经验,很明显,可能的罪魁祸首是它目前不知道CApplication是什么。

怎么会这样 我希望Visual Studio可以显示预处理器输出,但是您也可以在头脑中做到这一点。 如果.cpp源文件包含main.h ,则包含哪些文本? (main.h的文本,并在其capplication.h的文本。)如果源文件包括capplication.h,什么文本被包括在内? (在capplication.h的顶部,那么main.h的文本,那么capplication.h的其余部分与定义中的空行CApplication 。出了什么问题?)

main.h是否真的需要#include capplication.h还是出于声明g_App的目的而进行了声明?

// in main.h
class CApplication;
extern CApplication g_App;

您的main.h不需要包含capplication.h即可声明extern CApplication g_App 您可以尝试:

#ifndef main_h
#define main_h

//includes
#include    <windows.h>
#include    <commctrl.h>
#include    <d3d9.h>
#include    <fstream>

//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
class CApplication;
extern CApplication g_App;

//function prototypes
LRESULT CALLBACK        WindowProcedure(HWND,UINT,WPARAM,LPARAM);

#endif
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM