缺少使用extern语句的类型说明符

时间:2014-01-10 14:35:37

标签: c++ winapi extern

我知道这个问题曾被问到过,但我找不到解决问题的方法。我正在尝试为D3D启动一个简单的窗口。

我得到了一些带有一些全部资料的标题:

#pragma once
//includes for handling the window
#include<windows.h>
#include<commctrl.h>
#include<d3d9.h>
#include<fstream>

using namespace std;

#include "MyApplication.h"

//constants
#define TITLE L"D3D Example"
#define WINDOW_X 350
#define WINDOW_Y 320

//Button ID's
#define ID_START 1
#define ID_CANCEL 2

//globals
extern MyApplication g_Application;

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

在“main.cpp”中,我只是初始化那些全局。

#include "main.h"

MyApplication g_Application;
//mainloop starts here
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPreviousInstance,
                   LPSTR lpcmdline,
                   int nCmdShow)
{
    MSG Message; //contains messages from window
//main program loop
    while(g_Application.GetWindowStatus())
    {
//get next message from queue
        if(GetMessage(&Message,NULL,0,0))
        {
            //process dialog messages, e.g. tabs
            if(!IsDialogMessage(g_Application.GetWindowHandle(),&Message))
            {
                TranslateMessage(&Message); //translate messages
                DispatchMessage(&Message);  //dispatch message to window procedure
            }
        }
    }
    return 0;
} 

并且无法编译我收到此错误和警告。

Error   1   error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'g_Application' c:\users\benjamin\documents\visual studio 2010\projects\applicationproject\applicationproject\main.h    22  1   ApplicationProject
Error   2   error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.   c:\users\benjamin\documents\visual studio 2010\projects\applicationproject\applicationproject\main.h    22  1   ApplicationProject
Error   3   error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.   c:\users\benjamin\documents\visual studio 2010\projects\applicationproject\applicationproject\main.h    22  1   ApplicationProject

(抱歉德国错误列表常规它不应该是那样..)

这段代码接近我正在工作的教程,我已经将教程代码粘贴到它但它确实有同样的错误。我做错了什么?

感谢您的建议。

2 个答案:

答案 0 :(得分:2)

我的猜测是MyApplication.h包含main.h,创建循环依赖 - 每个都尝试包含另一个。包含防护可以防止灾难性的无限递归,但最终会有一个包含在另一个之前,第一个不能使用在第二个中声明的名称。

在这种情况下,您不需要MyApplication的完整定义,因此请替换

#include "MyApplication.h"

带有前瞻性声明

class MyApplication;

您仍需要在任何需要定义MyApplication的源文件中包含标题。

无论如何,我强烈建议您不要使用全局变量。像这样的问题只是你走上漫长道路的第一步。

答案 1 :(得分:1)

看起来这一行是你的问题:

#include "MyApplication.h";

最后取下分号,如下:

#include "MyApplication.h"

#include行是预处理程序指令,因此它们不需要以分号结尾(与C ++语句不同)。