问题描述
我不明白为什么链接器说在我向类中添加某些内容时找不到该函数。
// 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:类aiScene const
- __ cdecl Assimp :: Importer :: ReadFile(char const *,unsigned int)“(?ReadFile @ Importer @ Assimp @@ QEAAPEBVaiScene @@ PEBDI @ Z) 函数“ public:类aiScene const * __cdecl Assimp :: Importer :: ReadFile(class std :: basic_string
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
解决方法
我发现了问题。问题是Visual Studio由于某种原因不允许您将类向前声明为结构,反之亦然。不知道为什么会这样。之前,我曾问过一个问题,其他编译器对此并不认为类和结构是不同的。