提问人:Zebrafish 提问时间:9/27/2020 最后编辑:Zebrafish 更新时间:9/27/2020 访问量:355
在标头中的类中添加不完整的类型时无法解析的外部
Unresolved external when just adding an incomplete type in class in header
问:
我不明白为什么当我向类添加内容时,链接器说它找不到这个函数。
// In .h file
class Importer
{public:
void importOBJFile();
}
// In .cpp file
// INCLUDE ALL THE ASSIMP LIBRARY HEADERS HERE
void Importer::importOBJFile()
{
Assimp::Importer importerInst;
const aiScene* scene = importerInst.ReadFile("filename", aiProcess_Triangulate);
}
一切都像这样工作正常。但是,如果我添加:
const class aiScene* scene = nullptr;
...到我的类定义,或者转发声明类aiScene;然后添加:
const aiScene* scene = nullptr;
...到我的类定义,然后我得到一个编译错误:
错误LNK2019未解析的外部符号“public: class aiScene const
- __cdecl Assimp::Importer::ReadFile(char const *,unsigned int)“ (?ReadFile@Importer@Assimp@@QEAAPEBVaiScene@@PEBDI@Z) 引用于 函数 “public: class aiScene const * __cdecl Assimp::Importer::ReadFile(类 std::basic_string<char,struct std::char_traits,class std::allocator > const &,unsigned int)” (?ReadFile@Importer@Assimp@@QEAAPEBVaiScene@@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@I@Z)
为什么当我转发声明 aiScene 类并向类定义添加指针声明时,它抱怨找不到 readFile 函数?
在我的 Importer 类之前将所有 Assimp 库标头粘贴到 .h 文件中可以解决此问题,但我想避免在标头中粘贴标头,我不明白为什么会发生这种情况。
我在 Visual Studio 2019 上
答:
0赞
Zebrafish
9/27/2020
#1
我发现了问题所在。问题在于,由于某种原因,Visual Studio 不允许将类转发为结构,反之亦然。不知道为什么会这样。我之前问过一个问题,其他编译器并不认为类和结构为此目的不同。
评论
aiScene