提问人:Hoxbot 提问时间:5/8/2020 更新时间:5/8/2020 访问量:549
使用其他类的构造函数时出现链接器错误“未解析的外部符号”
Linker Error "unresolved external symbol" when using constructor of other class
问:
我一直在努力寻找为什么我的链接器会出现未解决的外部符号错误。错误如下所示:
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());
}
-class 在 swift_open_gl.h 文件中定义:Shader
#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
}
我已经尝试过使用和不使用(当我尝试在 .h 文件和 .cpp 文件之间移动函数定义时,Visual Studio 添加了它,所以我决定尝试一下),并且我已经验证了除了上面列出的文件之外,项目中的其他任何地方都不会发生。inline
#include <../swift_open_gl.h>
多一双眼睛来观察这一点将不胜感激!
答:
1赞
user9559196
5/8/2020
#1
同时提供类的默认构造函数。
class Shader {
public:
Shader(){} // default constructor
Shader(const char* cs_path);
};
不要在 Shader::Shader(const char* cs_path){} 定义中使用内联
评论
0赞
Hoxbot
5/8/2020
添加默认构造函数做到了!谢谢!
评论
inline Shader::Shader(const char * cs_path) {
摆脱并确保它是您项目的一部分。inline
swift_open_gl.cpp