gpt4 book ai didi

c++ - 链接器错误;找不到结构中的静态变量

转载 作者:行者123 更新时间:2023-11-28 05:29:58 27 4
gpt4 key购买 nike

我正在处理(其他人的)代码,其中动态库是从多个文件创建的。“MyStaticVector.h”文件包含具有固定(模板化)长度的静态 vector 的定义/实现。

这被编译成一个库(在 Windows 下是 .dll,在 Linux 下是 .so)。编译/链接运行成功。

MyStaticVector.h:
----------------

template< unsigned VectorLength >
struct MyStaticVector
{
static const unsigned uNumberOfElements = VectorLength;

MyStaticVector()
{
}
}

我的问题是,这在 MSVC11/debug+release 和 GCC/release 下有效。但是使用 GCC/调试时,我在运行时遇到错误,找不到“uNumberOfElements”的符号。你能解释一下,为什么?

最佳答案

模板参数必须在编译时建立 - 在这种情况下,是 DLL 的编译时。这是因为模板的每个实例都是不同的类。此时它将为其需要的每个值创建符号“uNumberOfElements”。

现在,如果你试图使用一个在编译期间不存在的类(或模板实例),那么它会尝试使用一个它没有创建的类,并且符号将不存在.

关于c++ - 链接器错误;找不到结构中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39770779/

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