我在标题中收到错误。它指向声明for循环的行。关于发生了什么的任何想法?
#include <iostream>
template <typename T>
T max(T* arr, size_t n)
{
if (!n)
throw("Can't take the max of an empty array, bro.");
T top = arr[0];
for (T* i(arr+1), j(arr+n); i != j; ++i)
if (*i > top)
top = *i;
return top;
}
int main()
{
char S[] = "kjadkjhdjasjkdaskjdsahd";
std::cout << max(S, strlen(S));
return 0;
}
答案 0 :(得分:6)
在行中:
for (T* i(arr+1), j(arr+n); i != j; ++i)
只有i被声明为T的指针,j被声明为T的实例。正确的声明是:
for (T* i(arr+1),* j(arr+n); i != j; ++i)
顺便说一下,你应该为strlen添加include:
#include <cstring>
答案 1 :(得分:1)
这是多个逗号分隔的指针变量声明的常见错误。更改for循环标题,如下所示:
for (T *i(arr+1), *j(arr+n); i != j; ++i) {
// ^ Note the additional asterisk!
}
查看已修复且有效的sample here。