gpt4 book ai didi

c++ - MSVC 链接器错误 LNK2001 unresolved external for template method defined in cpp file

转载 作者:行者123 更新时间:2023-11-30 03:04:05 25 4
gpt4 key购买 nike

我对 C++ 有点陌生(我通常在 C# 中工作,但现在我正在做一个有点跨平台的项目),所以我并不真正习惯它的所有概念以及编译/链接作品。所以,自然地,我不太确定为什么会收到此错误。我对这个错误进行了一些研究,当人们不链接库或在头文件中声明函数但从不在头文件之外定义它时,这似乎是人们经常遇到的问题。奇怪的是,我的错误不是任何一个的结果。确切的错误文本是这样的:

"Error 1 error LNK2001: unresolved external symbol "public: __thiscall ld22::QuadNode<class ld22::DrawableObject>::QuadNode<class ld22::DrawableObject>(class sf::Rect<float>)" (??0?$QuadNode@VDrawableObject@ld22@@@ld22@@QAE@V?$Rect@M@sf@@@Z) C:\Users\Nick\Documents\Visual Studio 2010\Projects\GDCSFMLTest\GDCSFMLTest\main.obj "

对我来说,它似乎在试图告诉我我从未实现过该文件。但是,我有。 main.cpp ,编译成main.obj并给出错误的文件,包括Quadtree.h ,它用 QuadNode(sf::FloatRect); 行声明函数(技术上是构造函数) , 并在文件 Quadtree.cpp 中我包括 Quadtree.h并定义构造函数如下:

template<class T>
ld22::QuadNode<T>::QuadNode(sf::FloatRect bounds)
{
Bounds = bounds;
}

请原谅任何糟糕的编码实践和诸如此类的东西,正如我所说,我对 C++ 还很陌生,我仍在努力解决问题。感谢任何帮助(特别是如果我在某个地方犯了一个愚蠢的或初学者的错误,我觉得我犯了),如果您需要更多信息,我很乐意提供。

最佳答案

在 C++ 中,模板类必须在头文件中定义。这是因为与 C# 中的泛型不同,它们跟踪 <T>。在运行时键入,编译器实际上为每个 <T> 生成一个新类你用它。编译器无法实际编译类的模板形式,然后链接类型信息。在我看来,C++ 中的模板实际上是一种发生在编译阶段之前的源代码转换形式。

有关原因的更多信息,请参阅此问题:

关于c++ - MSVC 链接器错误 LNK2001 unresolved external for template method defined in cpp file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8950773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com