Внутри файла заголовка есть следующее:
Context.h:
namespace kgl
{
namespace vk
{
/** Function to initialize the rendering library
*/
static void initialize() ;
/** Function to retrieve whether or not the rendering library is initialized.
* @return Whether or not the rendering library is initialized.
*/
static bool isInitialized() ;
/** Function to shut down rendering library.
*/
static void shutdown() ;
/** Function to retrieve the vulkan instance for this program.
*/
static const ::vk::Instance instance() ;
...
...
И затем в файле cpp у меня есть:
Context.cpp:
namespace kgl
{
namespace vk
{
static VulkanContextData vk_context ;
const ::vk::Instance instance()
{
return ::kgl::vk::vk_context.instance.instance() ;
}
void initialize()
{
::kgl::vk::vk_context.initialize() ;
}
bool isInitialized()
{
return ::kgl::vk::vk_context.initialized ;
}
void shutdown()
{
::kgl::vk::vk_context.shutdown() ;
}
...
...
Когда я связываю эту библиотеку в исполняемом файле Ошибка компоновщика "неопределенная ссылка на kgl :: vk :: instance ()".
Если я удалю это одно использование:
Window.cpp:
void Window::initialize( const char* name, unsigned gpu, unsigned width, unsigned height )
{
const ::vk::Instance instance = ::kgl::vk::instance() ;
data().window = SDL_CreateWindow( name, 500, 500, width, height, SDL_WINDOW_VULKAN | SDL_WINDOW_SHOWN ) ;
...
...
Сборка выполняется нормально. vk :: Instance происходит из vulkan.hpp, предоставляемого библиотеками vulkan, и я передаю его объявление внутри Context.h. Однако я делаю это с каждым вулканским объектом, и это единственная проблема, с которой я сталкиваюсь при строительстве.