我在线获得了一个.hpp文件,它同时包含了类声明和定义:
//Foo.hpp
class Foo{
Foo();
<template T>
Foo& func1(const &T t);
};
inline Foo::Foo(){
//constructor
}
<template T>
Foo& Foo::func1(const T& t){
//function
}
我必须在多个源文件中包含此头文件(基本上是一个库)。由于它包含方法的定义,当我在项目中多次包含它时,我会重新声明(或重新定义,我忘记)错误。所以我决定将定义拆分成.cpp文件,并且我在main.cpp中使用库,如图所示。
//Foo.hpp
class Foo{
Foo();
<template T>
Foo& func1(const T& t);
};
和
//Foo.cpp
#include "Foo.h"
Foo::Foo(){
//constructor
}
<template T>
Foo& Foo::func1(const T& t){
//function
}
用于函数调用
//main.cpp
#include "Foo.h"
int main (void){
Foo bar;
bar.func1(5); //shows error as "undefined reference to"
bar.func1<int>(5); //doesn't work either
}
根据我的发现,我认为应该通过实例化模板来声明模板的可接受类型。但是,我不知道这样做的语法和位置。提前感谢您的任何帮助。
仅供参考:作为临时解决方案,我已明确将参数类型声明为&#34; int&#34;对于Foo.hpp中的原型和Foo.cpp中的定义中的func1(),并将所有模板一起删除。没有错误返回。
这只是暂时的,因为还有许多其他类似的模板化函数如func1(),它似乎不是一个解决问题的好方法。我坚信&#34; int&#34;应该被声明为模板T的数据类型之一,我只是不知道如何。