【发布时间】:2017-09-04 14:32:44
【问题描述】:
编辑:这不是标准模板问题的副本。
我的场景涉及一个模板化类和该类的成员函数,其中一个参数是模板化的,但与该类的类型不同。
即使我将定义放在标题中,我仍然找不到正确的语法。
有人可以帮我解决我的具体问题吗?
我过于简化的代码:
Foo.h:
template<typename T1>
class Foo {
public:
template<typename T2>
static void bar(vector<T1>& a, vector<T2>& b);
};
Foo.cpp:
#include <Foo.h>
template<typename T1>
template<typename T2>
void Foo<T1>::bar(vector<T1>& a, vector<T2>& b) {
//code logic
}
Goo.cpp:
#include <Foo.h>
int main(int argc, char** argv) {
vector<int> a;
vector<double> b;
Foo<int>::bar(a, b);
}
我的错误:
undefined reference to
void Foo<int>::bar<double>(std::vector<int, std::allocator<int> >&,
std::vector<double, std::allocator<double> >&)
我找不到定义模板的正确方法。
我还注意到类型名的顺序会改变错误(也将整个函数放在类声明中)。
正确的语法是什么?
【问题讨论】:
-
为什么你认为这不是重复的?您不能在源文件中定义模板。 “即使我将定义放在标题中,我仍然找不到正确的语法。” ...那你为什么不在标题中显示带有定义的代码呢?
-
如果你edit的问题是向我们展示头文件中定义的模板化成员函数的代码,我们可以重新打开它。感谢您简化代码 - 请确保编辑后的简化版本仍然失败,并包含错误消息。 (如果你在评论中@-提到我,我想我可以单枪匹马地重新打开它。)
-
您的 Foo.h 有错字和缺少分号。请仅复制和粘贴您实际尝试编译并验证您收到声明的错误消息的代码。