Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 累计<;int>;(&;name[0],&;name[length])出现错误,无法将参数1从';字符*';至';常数int*'; #包括 模板 内联 累计(T常数*求和,T常数*结束) { T total=T();//假设T()实际创建了一个零值 while(beg!=结束){ 总数+=*beg; ++乞讨; } 返回总数; } int main() { //创建5个整数值的数组 int num[]={1,2,3,4,5}; //打印平均值 std::cout_C++_Templates - Fatal编程技术网

C++ 累计<;int>;(&;name[0],&;name[length])出现错误,无法将参数1从';字符*';至';常数int*'; #包括 模板 内联 累计(T常数*求和,T常数*结束) { T total=T();//假设T()实际创建了一个零值 while(beg!=结束){ 总数+=*beg; ++乞讨; } 返回总数; } int main() { //创建5个整数值的数组 int num[]={1,2,3,4,5}; //打印平均值 std::cout

C++ 累计<;int>;(&;name[0],&;name[length])出现错误,无法将参数1从';字符*';至';常数int*'; #包括 模板 内联 累计(T常数*求和,T常数*结束) { T total=T();//假设T()实际创建了一个零值 while(beg!=结束){ 总数+=*beg; ++乞讨; } 返回总数; } int main() { //创建5个整数值的数组 int num[]={1,2,3,4,5}; //打印平均值 std::cout,c++,templates,C++,Templates,实例化为int accum(int const*beg,int const*end),不能将char*参数传递给此函数 未注释行工作的原因是它实例化了accum行accum(&name[0],&name[length])尝试调用声明的函数int accumt(const int*,const int*)使用类型 char *,char */COD>。编译器正确的抱怨:C++从不允许从 char *到 int */COD>的隐式转换。如果这是书所说的,则存在错误。在尝试自己的同时,也应该查看已经存

实例化为
int accum(int const*beg,int const*end)
,不能将
char*
参数传递给此函数


未注释行工作的原因是它实例化了
accum

accum(&name[0],&name[length])
尝试调用声明的函数
int accumt(const int*,const int*)使用类型<代码> char *,char */COD>。编译器正确的抱怨:C++从不允许从<代码> char *<代码>到<代码> int */COD>的隐式转换。如果这是书所说的,则存在错误。

在尝试自己的同时,也应该查看已经存在的函数,比如,也许你是MIS。阅读书中的内容,或者你是指
acum(&name[0],&name[length])
?这不是书中所说的。本节向你展示了如何使用traits,因此有形式
template typename acculationtraits::AccT acum(T const*begin,T const*end)
引用书中的内容(逐字复制和粘贴):这里的问题是,我们的模板是为char类型实例化的,这也是通过引入一个额外的模板参数AccT来实现的,该参数描述了变量total(以及返回类型)所使用的类型。但是,这会给模板的所有用户带来额外负担:他们必须在每次调用模板时指定额外的类型。因此,在我们的示例中,我们可能需要编写以下内容:accum(&name[0],&name[length])这不是一个过度的限制,但它是可以避免的。不,至少从1995年左右开始:)我只是删除了我之前的评论,只是为了记录在案,我在问代码在过去是否工作。谢谢,当我正在读的书建议正确的解决方案,但在测试时出现错误时,这真的让我大吃一惊……因此问题是book已过时或只是book author部分出错。@kypronite该书是正确的。您没有仔细阅读。它特别指出“……我们可以通过引入一个额外的模板参数AccT来解决此问题,该参数描述变量total所使用的类型(以及返回类型)”也就是说,表单模板的一个新函数
Ret accum(T const*begin,T const*end)
@Yuushi只是一个小的更正:它实际上必须是
template Ret accum(T const*begin,T const*end)
,这样就可以指定
Ret
,并且仍然可以推断出
T
。@Angew谢谢,不用想就很快把它打出来。当然,你是对的。
#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'; 
}