Неопределенная ссылка на глобальную функцию c stati - PullRequest
0 голосов
/ 11 июля 2020

Внутри файла заголовка есть следующее:

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

...