我知道这个问题曾被问到过,但我找不到解决问题的方法。我正在尝试为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
(抱歉德国错误列表常规它不应该是那样..)
这段代码接近我正在工作的教程,我已经将教程代码粘贴到它但它确实有同样的错误。我做错了什么?
感谢您的建议。
答案 0 :(得分:2)
我的猜测是MyApplication.h
包含main.h
,创建循环依赖 - 每个都尝试包含另一个。包含防护可以防止灾难性的无限递归,但最终会有一个包含在另一个之前,第一个不能使用在第二个中声明的名称。
在这种情况下,您不需要MyApplication
的完整定义,因此请替换
#include "MyApplication.h"
带有前瞻性声明
class MyApplication;
您仍需要在任何需要定义MyApplication
的源文件中包含标题。
无论如何,我强烈建议您不要使用全局变量。像这样的问题只是你走上漫长道路的第一步。
答案 1 :(得分:1)
看起来这一行是你的问题:
#include "MyApplication.h";
最后取下分号,如下:
#include "MyApplication.h"
#include
行是预处理程序指令,因此它们不需要以分号结尾(与C ++语句不同)。