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

Linker error; static variable in struct not found

我正在处理(其他人的)代码,其中动态库是从多个文件创建的。 文件 "MyStaticVector.h" 包含具有固定(模板化)长度的静态向量的 definition/implementation。

编译成库(Windows下的.dll,Linux下的.so)。 Compiling/linking运行成功。

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

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

    MyStaticVector()
    {
    }
}

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

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

现在,如果您尝试使用编译时不存在的 class(或模板实例),那么它会尝试使用它不存在的 class' t made,符号将不存在。