C ++: неразрешенный внешний символ, брошенный в приложение. cpp (спрашивался ранее, но был удален, включал новую информацию и исходный код) - PullRequest
0 голосов
/ 22 февраля 2020

Итак, я пишу обработчик ввода в C ++ (и GLFW, но это не имеет значения), и одна функция, которая не реализована в заголовке, сбрасывает эту ошибку:

1>Input.obj : error LNK2001: unresolved external symbol "private: static class Input Input::instance" (?instance@Input@@0V1@A)

Это вызывается так в приложении. cpp:

Input::GetInstance().Init(window);
Input::GetInstance().Update();

И реализация выглядит так:

Input.h:

#ifndef INPUT_H_INCULDED
#define INPUT_H_INCLUDED

//Some includes

class Input
{
public:
    static Input& GetInstance();
  //some other non-static stuff
};

#endif

И реализация в Input . cpp:

Input& Input::GetInstance()
{
return instance;
}

instance является закрытым членом Input.

У меня есть glew и glfw libs, и он включен в папку с названием Dependencies в каталоге решений. Я включил его в свойства проекта в C / C ++ \ General \ Additional Include Каталоги, а также добавил $ (SolutionDir) sr c, потому что я поместил каждый исходный файл в sr c.

* 1019. * Затем я связал их, в Linker \ General \ Additional Library Directory, я добавил расположение файлов lib, и в Linker \ Input я добавил glfw3.lib, opengl32.lib и glew3s.lib в Дополнительные зависимости и, наконец, добавил определение препроцессора GLEW_STATI C. Это единственные изменения, которые я сделал в свойствах проекта, и я использую Debug, конфигурацию x86. Ссылка на исходный код:

https://github.com/Andrispowq/Prehistoric-Engine---C-

1 Ответ

0 голосов
/ 27 февраля 2020

Ваш экземпляр член, очевидно, также должен быть участником c, по многим причинам, например, для достижения одноэлементного шаблона, и особенно потому, что вы возвращаетесь по ссылке. Кстати, если ваша функция-член stati c имеет доступ к некоторым членам вашего класса, этот член также должен быть stati c. Исключением будет, например, если ваш метод stati c принимает аргумент, который может быть конкретным экземпляром вашего класса, или приведен к нему, и, в дальнейшем, используя его параметр, функция-член stati c может получить доступ или использовать методы или члены-данные через этот известный экземпляр, передаваемый в качестве аргумента члену stati c, но ваш GetInstance не принимает аргумента. Я надеюсь, что это поможет вам понять, что говорит ваш компилятор, и что компилятор не может найти символ экземпляр .

...