отсутствует указатель типа с оператором extern

Я знаю, что этот вопрос задавался несколько раз, но я не нашел решения для своей проблемы. Я пытаюсь начать простое Окно для 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

(простите за немецкий список ошибок, это не должно быть так ..)

Этот код близок к учебнику, над которым я работаю, и я уже скопировал, вставил код учебника в него, но он имеет ту же ошибку. Что я сделал не так?

Спасибо за ваши советы.

0

Решение

Я думаю, что MyApplication.h включает в себя main.h, создавая круговую зависимость — каждый пытается включить другого. Защитники включения предотвращают катастрофическую бесконечную рекурсию, но в итоге один из них включается раньше другого, и первый не может использовать имена, объявленные во втором.

В этом случае вам не нужно полное определение MyApplicationтак что замени

#include "MyApplication.h"

с предварительной декларацией

class MyApplication;

Вам все еще нужно будет включить заголовок в любой исходный файл, который нуждается в определении MyApplication,

В любом случае, я настоятельно советую вам не использовать глобальные переменные. Подобные проблемы — это только первые шаги на долгом пути боли, если вы это сделаете.

2

Другие решения

Похоже, эта строка — ваша проблема:

#include "MyApplication.h";

Снимите точку с запятой в конце, как это:

#include "MyApplication.h"

#include строки являются директивами препроцессора, поэтому их не нужно заканчивать точкой с запятой (в отличие от операторов C ++).

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector