gpt4 book ai didi

c++ - accum(&name[0], &name[length]) 给出错误无法将参数 1 从 'char *' 转换为 'const int *'

转载 作者:行者123 更新时间:2023-11-30 04:22:52 33 4
gpt4 key购买 nike

#include <iostream>

template <typename T>
inline
T accum (T const* beg, T const* end)
{
T total = T(); // assume T() actually creates a zero value
while (beg != end) {
total += *beg;
++beg;
}
return total;
}

int main()
{

// create array of 5 integer values
int num[]={1,2,3,4,5};

// print average value
std::cout << "the average value of the integer values is "
<< accum(&num[0], &num[5]) / 5
<< '\n';

// create array of character values
char name[] = "templates";
int length = sizeof(name)-1;

// (try to) print average character value
std::cout << "the average value of the characters in \""
<< name << "\" is "
<< accum(&name[0], &name[length]) / length
//<< accum<int>(&name[0], &name[length]) / length //but this give me error
<< '\n';
}

我正在阅读 c++ templates:the complete guide book 和作者提到的我可以使用模板特化
accum<int>(&name[0], &name[length]) / length
我在 visual studio 2012 中尝试此操作并出现错误
main.cpp(34):错误 C2664:“accum”:无法将参数 1 从“char *”转换为“const int *”
我的 C++ 有点生疏了。
我只是好奇,如果这种“行为”以前是允许的,但“最新”C++ 标准的变化使这种行为变得非法,或者这是我正在阅读的书中的一个错误。

最佳答案

实例化为int accum<int> (int const* beg, int const* end) , 你不能通过 char *此函数的参数。

未注释行起作用的原因是它实例化了 accum<char> .

关于c++ - accum<int>(&name[0], &name[length]) 给出错误无法将参数 1 从 'char *' 转换为 'const int *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581938/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com