来自' char *'的无效转换去#char;'

时间:2014-03-26 22:21:59

标签: c++

我在标题中收到错误。它指向声明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;
} 

2 个答案:

答案 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