Завожу глобальную переменную собственноручно написанного класса в файле main.cpp следующим образом:
extern Next temp;
И определяю её в нужных мне h-файлах:
Next temp;
Компилятор жалуется:
Ошибка C2146 синтаксическая ошибка: отсутствие ";" перед идентификатором "temp"
Ошибка C4430 отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
таких ошибок много. Прошу помощи. P.S.: так с любым моим классом. P.S.S.: да, я в курсе, глобальные переменные зло. Но тут она требуется. Отвечу сразу, для чего. Для использование я оконной процедуре WndProc, которая находится в другом файле.
Минимальный(!!!) пример:
main.cpp
#include <d3d9.h>
#include <d3dcompiler.h>
#include <windows.h>
#include "d3dUtility.h"
#pragma comment(lib, "d3d9.lib")
using namespace d3d;
D3DXDevice dxDevice;
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int iCmdShow)
{
return 0;
}
d3dUtility.h
#pragma once
#include <Windows.h>
#include <d3d9.h>
#include <d3dcompiler.h>
#include "function.h"
namespace d3d
{
class D3DXDevice
{
IDirect3DDevice9* Device; // указатель на созданное устройство
public:
D3DXDevice();
IDirect3DDevice9* getDevice();
~D3DXDevice();
};
};
d3dUtility.cpp
#include "d3dUtility.h"
namespace d3d
{
D3DXDevice::D3DXDevice() :Device(nullptr) {}
IDirect3DDevice9 * D3DXDevice::getDevice()
{
return this->Device;
}
D3DXDevice::~D3DXDevice()
{
this->Device->Release(); // удаляем устройство
}
};
function.h
#pragma once
#include "d3dUtility.h"
#include <windows.h>
using namespace d3d;
extern D3DXDevice dxDevice;
bool Display();
test.cpp
#include "function.h"
bool Display()
{
if (dxDevice.getDevice())
{
dxDevice.getDevice()->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 5, 1.0f, 0);
dxDevice.getDevice()->Present(0, 0, 0, 0);
}
return true;
}
P.S.: увы, но это правда минимальный пример. P.S.S.: VS 2017.
Тут вот какое дело, если я правильно понял текст программы. В файле d3dUtility.h Вы подключаете файл function.h, в котором объявлена внешняя переменная. Но дело в том, что на этот момент класс еще даже не объявлен. Отсюда и ошибка. Выход: не включать сюда function.h либо делать опережающее объявление класса D3DXDevice.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Есть стандартный вектор, допустим типа std::vector<int>Есть функция void plusOne(std::vector<int>::iterator it1, std::vector<int>::iterator it2), прибавляющая всем элементам...
В VS2013 есть решение с проектами на С++Один главный, а остальные планируется оформить в виде динамических библиотек
Базовый класс Фигура с полем «название фигуры» и методом «Печать названия»Производный класс Шар с полем Радиус
Определить координаты малейшего интервала с целочисленными координатами концов, на который приходятся значения элементов действительной...