Я изо всех сил пытался понять, почему мой компоновщик получает неразрешенную ошибку внешнего символа. Ошибка выглядит так:
Error
LNK2019
unresolved external symbol "public: __thiscall Shader::Shader(char const *)" (??0Shader@@QAE@PBD@Z) referenced in function "public: __thiscall GridWorldGPGPU::GridWorldGPGPU(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,unsigned int)" (??0GridWorldGPGPU@@QAE@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@I@Z)
DV2556_Project
grid_world_GPGPU.obj
1
Насколько я понимаю, это как-то связано с тем, что мой компоновщик находит объявление Shader::Shader(char const *)
-функции, но не может найти определение. Я смотрел на это часами и не могу понять, почему компоновщик становится грустным.
grid_world_GPGPU.h:
#ifndef GRID_WORLD_GPGPU_H
#define GRID_WORLD_GPGPU_H
#include "grid_world.h"
#include <../swift_open_gl.h>
class GridWorldGPGPU : public GridWorld {
private:
Shader* compute_shader_ = nullptr;
public:
GridWorldGPGPU(std::string in_path_shader, unsigned int in_side = 1);
};
#endif // !GRID_WORLD_GPGPU_H
grid_world_GPGPU. cpp:
GridWorldGPGPU::GridWorldGPGPU(std::string in_path_shader, unsigned int in_side)
: GridWorld(in_side) {
this->compute_shader_ = new Shader(in_path_shader.c_str());
}
Класс Shader
определен в файле swift_open_gl.h :
#ifndef SWIFT_OPEN_GL_H
#define SWIFT_OPEN_GL_H
#include <glad/glad.h>
#include <GLFW/glfw3.h>
class Shader {
public:
Shader(const char* cs_path);
};
#endif // !SWIFT_OPEN_GL_H
и swift_open_gl. cpp имеет это:
#include "..\swift_open_gl.h"
inline Shader::Shader(const char * cs_path) {
//Do stuff
}
Я пробовал с inline
и без него (Visual Studio добавила его, когда я пытался переместить определение функции между .h-файлом и файлом. cpp -файл, поэтому я решил попробовать его) и убедился, что #include <../swift_open_gl.h>
не встречается в проекте где-либо еще, кроме файлов, перечисленных выше.
Дополнительная пара глаз, чтобы смотреть за это был бы признателен!