相关模板参数

时间:2011-08-23 15:21:39

标签: c++ templates

我的模板化函数有两个模板参数(int mint n)。该函数返回一个类Foo<int r>,我想要r=m+n

在foo.h中我有:

template<int m> class Foo {};
template<int m, int n>
Foo<m+n> myFunc(const Foo<m> &a, const Foo<n> &b);

在foo.cpp中我有:

Foo<m+n> myFunc(const Foo<m> &a, const Foo<n> &b)
{
    return Foo<m+n>();
}

最后在main.cpp中:

#include "foo.h"
int main()
{
    myFunc(Foo<2>(), Foo<3>());
}

如果我尝试这个,我会收到链接器错误。:

 "undefined reference to `Foo<(2)+(2)> myFunc(Foo<2> const&, Foo<2> const&)'

编辑:编辑包含完整代码。可能不太清楚,但有些人更喜欢。

3 个答案:

答案 0 :(得分:3)

从您提供的内容来看,错误表明虽然您已经声明了该功能,但您还没有在链接器可以看到的任何地方提供实现。

答案 1 :(得分:3)

您可能将函数体代码放在错误的位置。对于(非专用)模板函数,您通常希望将整个函数体放在头文件而不是源文件中,否则编译器无法生成代码调用它时的那个函数。

答案 2 :(得分:0)

那是因为你没有定义函数,或者在实例化时编译器看不到定义。如果你编写一个函数体,它可以工作:

template <int> class Foo {};

template<int m, int n>
Foo<m+n> myFunc(const Foo<m> &a, const Foo<n> &b) {} // NOTE: Body.

int main () {
    myFunc (Foo<1>(), Foo<2>());
}

(旁注:请在下次发布完整代码)