gpt4 book ai didi

c++ - C++ 函数模板实例化的链接器错误(模板实例化类的成员函数)

转载 作者:行者123 更新时间:2023-11-28 07:09:39 26 4
gpt4 key购买 nike

<分区>

我有很多现有的 C++ 代码,其中包含在 .cpp 文件中实现的模板类。 我想为其中一个类添加一个模板函数。我的问题是我无法让编译器实例化函数模板。

我创建了一个示例来演示这个问题。我想添加成员函数 convert(),带有自己的模板参数 LenNew:

template <typename Number, int Len>
class MyClass {
public:
// the function I'm trying to add
template <int LenNew>
MyClass<Number, LenNew> convert();

// other methods I want to keep this way
void function(); // implemented in .cpp file

private:
Number n[Len];
};

在现有设置中,.cpp 文件实现方法并实例化类模板:

template <typename Number, int Len>
void MyClass<Number, Len>::function()
{
// implementation
}

// instantiate template-class with specific template parameters
template class MyClass<double, 1>;

所以我为我的新成员函数添加了实现,并尝试实例化模板,但似乎不起作用:

template <typename Number, int Len>
template <int LenNew>
MyClass<Number, LenNew> MyClass<Number, Len>::convert()
{
// implement...
}

// try instantiate
template<> template<> MyClass<double, 2> MyClass<double, 1>::convert<2>();

它编译得很好,但是当我尝试使用来自不同 .cpp 文件的 convert() 时,我得到了一个 undefined reference :

main.cpp:(.text+0x1c): undefined reference to `MyClass<double, 2> MyClass<double, 1>::convert<2>()'

这是一个演示程序的要点:https://gist.github.com/md2k7/8503385

sorry,好像有很多很相似的问题,但是我还是没弄明白哪里出了问题。

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