Я знаю, что этот вопрос задавался несколько раз, но я не нашел решения для своей проблемы. Я пытаюсь начать простое Окно для D3D позже.
Я получил заголовок с некоторыми вещами gobal:
#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
(простите за немецкий список ошибок, это не должно быть так ..)
Этот код близок к учебнику, над которым я работаю, и я уже скопировал, вставил код учебника в него, но он имеет ту же ошибку. Что я сделал не так?
Спасибо за ваши советы.
Я думаю, что MyApplication.h
включает в себя main.h
, создавая круговую зависимость — каждый пытается включить другого. Защитники включения предотвращают катастрофическую бесконечную рекурсию, но в итоге один из них включается раньше другого, и первый не может использовать имена, объявленные во втором.
В этом случае вам не нужно полное определение MyApplication
так что замени
#include "MyApplication.h"
с предварительной декларацией
class MyApplication;
Вам все еще нужно будет включить заголовок в любой исходный файл, который нуждается в определении MyApplication
,
В любом случае, я настоятельно советую вам не использовать глобальные переменные. Подобные проблемы — это только первые шаги на долгом пути боли, если вы это сделаете.
Похоже, эта строка — ваша проблема:
#include "MyApplication.h";
Снимите точку с запятой в конце, как это:
#include "MyApplication.h"
#include
строки являются директивами препроцессора, поэтому их не нужно заканчивать точкой с запятой (в отличие от операторов C ++).