Я пытаюсь выучить Вулкан из книги, в которой есть некоторые алгоритмы. Код, представленный в этой книге, использует встроенные файлы (.inl) и макросы. Я выполняю шаги, упомянутые в этой книге, но каждый раз, когда я пытаюсь создать свой код, я получаю список различных ошибок в файле .inl.
Я нашел пример кода в интернете, который более-менее похож на мой код, поэтому я не знаю, где может быть моя ошибка. Я знаю, для чего нужны встроенные файлы, но я никогда не использую их для определения макросов.
Файлы выглядят так:
ListOfFunctions.inl
#ifndef EXPORTED_VULKAN_FUNCTION
#define EXPORTED_VULKAN_FUNCTION( function )
#endif
EXPORTED_VULKAN_FUNCTION(vkGetInstanceProcAddr) // red underlined
#undef EXPORTED_VULKAN_FUNCTION
Functions.h
#pragma once
#include "vulkan.h"
namespace vcb
{
#define EXPORTED_VULKAN_FUNCTION(name) extern PFN_##name name;
#include "ListOfFunctions.inl"
}
Functions.cpp
#include "Functions.h"
namespace vcb
{
#define EXPORTED_VULKAN_FUNCTION(name) PFN_##name name;
#include "ListOfFunctions.inl"
}
MyVulkan.h
#pragma once
#include <Windows.h>
#include <iostream>
#include "Functions.h"
#define VULKAN_LIB HMODULE
namespace vcb
{
bool loadExportedFunction(const VULKAN_LIB& vulkan);
};
MyVulkan.cpp
#include "MyVulkan.h"
namespace vcb
{
bool loadExportedFunction(const VULKAN_LIB& vulkan)
{
#define LoadFunction GetProcAddress
#define EXPORTED_VULKAN_FUNCTION( name ) \
name = (PFN_##name) LoadFunction(vulkan, #name); \
if (name == nullptr) { \
std::cout << "Could not load exported function: " #name << std::endl;\
return false; \
}
#include "ListOfFunctions.inl"
return true;
}
}
Я получаю много ошибок при попытке построить этот код. Некоторые из них говорят мне, что я переопределяю некоторые функции (EXPORTED_VULKAN_FUNCTION), но я не знаю, как решить эту проблему, а точнее: где мне не определить ее?
Я даже не уверен, является ли файл .inl необходимостью. Если нет, то как и где я должен рефакторинг этого кода?
Скриншот ошибки