我的函数模板中出现问题,试图在Functions.cpp
中实例化我的函数。但是这样做,给了我一个编译错误。以下是我遇到的错误。如果有人能够提供帮助,将不胜感激!谢谢!
错误
Functions.cpp:81:15: error: template-id ‘remove<int>’ for ‘int
CS150::remove(int*, int*, int*)’ does n template declaration
template int remove<int>(int *first, int*last, int* val);
^~~~~~~~~~~
Functions.cpp:56:5: note: candidate is: template<class T> T*
CS150::remove(T*, T*, T*)
T* remove(T *first, T *last, T* val)
^~~~~~
Function.cpp
template <typename T>
T* remove(T *first, T *last, T* val)
{
T result = first;
while (first!=last)
{
if (!(*first == val))
{
*result = *first;
++result;
}
++first;
}
return result;
}
template int remove<int>(int *first, int*last, int* val);
Functions.h
template <typename T>
T* remove(T *first, T *last, const T& val);
驱动程序文件
static void TestRemove1(void)
{
cout << "***** Remove1 *****" << endl;
int i1[] = { 5, -7, 4, 10, -21, 15, 9 };
int size = sizeof(i1) / sizeof(int);
CS150::display(i1, i1 + size);
int item = -1;
int * newend = CS150::remove(i1, i1 + size, item);
cout << "remove " << item << ", new list: ";
CS150::display(i1, newend);
}
static void TestRemove2(void)
{
cout << "***** Remove2 *****" << endl;
int i1[] = {5, -7, 4, 10, -7, 15, 9};
int size = sizeof(i1) / sizeof(int);
CS150::display(i1, i1 + size);
int item = -7;
int *newend = CS150::remove(i1, i1 + size, item);
cout << "remove " << item << ", new list: ";
CS150::display(i1, newend);
}
答案 0 :(得分:0)
您不需要template
关键字。以下方法可能有效(我仍然不确定为什么根本不需要此行):
int remove<int>(int *first, int*last, int* val);
通过编写remove<int>
,您可以实例化模板,因此它不再是模板。
答案 1 :(得分:0)
您的模板函数签名说它返回T*
,但是您的函数定义和实例化返回T
(int
)。您需要使它们匹配。