只是在标题中的类中添加不完整的类型时,外部无法解析

问题描述

我不明白为什么链接器说在我向类中添加某些内容时找不到该函数

// 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由于某种原因不允许您将类向前声明为结构,反之亦然。不知道为什么会这样。之前,我曾问过一个问题,其他编译器对此并不认为类和结构是不同的。