原则:“模板参数推导机制无法推导函数的返回值类型”

版本一:

// 缺少<T>     参数 int n    对比第三个版本( 缺少<T>   参数 T n) !

编译错误提示:

错误 1 error C2783: “T FibRecursion(int)”: 无法为“T”推导 模板 参数 c:\users\yi\documents\visual studio 2005\projects\斐波纳契数列\斐波纳契数列\斐波纳契数列.cpp 16

 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(int n) // 参数 int n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion(n-) + FibRecursion(n-); // 缺少<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //错误行
system("pause");
return ;
}

版本二:

// 加上<T>   参数 int n 或者 T n

编译通过!

 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(int n) // 参数 int n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion<T>(n-) + FibRecursion<T>(n-); // 加上<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //没有报错
system("pause");
return ;
}
 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(T n) // 参数 T n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion<T>(n-) + FibRecursion<T>(n-); // 加上<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //没有报错
system("pause");
return ;
}

版本三:

// 缺少<T>   参数 T n

编译通过!

 #include "stdafx.h"
#include <iostream> template<class T>
T FibRecursion(T n) // 参数 T n
{
if (n<)
return -; if (n == || n == )
return ; return FibRecursion(n-) + FibRecursion(n-); // 缺少<T>
}
int _tmain(int argc, _TCHAR* argv[])
{
int result = FibRecursion<int>(); //没有报错
system("pause");
return ;
}

http://bbs.sjtu.edu.cn/bbstcon,board,C,reid,1293357257.html 没看懂,囧!

error C2783: 无法为“T”推导 模板 参数的更多相关文章

  1. c++特性:指向类成员的指针和非类型类模板参数和函数指针返回值 参数推导机制和关联型别

    一.c++允许定义指向类成员的指针,包括类函数成员指针和类数据成员指针 格式如下: class A { public: void func(){printf("This is a funct ...

  2. C++11 图说VS2013下的引用叠加规则和模板参数类型推导规则

    背景:    最近在学习C++STL,出于偶然,在C++Reference上看到了vector下的emplace_back函数,不想由此引发了一系列的“探索”,于是就有了现在这篇博文. 前言:     ...

  3. C++17尝鲜:类模板中的模板参数自动推导

    模板参数自动推导 在C++17之前,类模板构造器的模板参数是不能像函数模板的模板参数那样被自动推导的,比如我们无法写 std::pair a{1, "a"s}; // C++17 ...

  4. c++11-17 模板核心知识(五)—— 理解模板参数推导规则

    Case 1 : ParamType是一个指针或者引用,但不是universal reference T& const T& T* Case 2 : ParamType是Univers ...

  5. 零值初始化&字符串常数作为函数模板参数

    1.在定义一个局部变量时,并希望该局部变量的初始化一个值,可以显示调用其默认构造函数,使其值为0(bool类型默认值为false). template <typename T> void ...

  6. 从零开始学C++之模板(三):缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...

  7. 缺省模板参数(借助标准模板容器实现Stack模板)、成员模板、关键字typename

    一.缺省模板参数 回顾前面的文章,都是自己管理stack的内存,无论是链栈还是数组栈,能否借助标准模板容器管理呢?答案是肯定的,只需要多传一个模板参数即可,而且模板参数还可以是缺省的,如下: temp ...

  8. C++非类型模板参数

    对于函数模板与类模板,模板参数并不局限于类型,普通值也可以作为模板参数.在基于类型参数的模板中,你定义了一些具体的细节来加以确定代码,直到代码被调用时这些细节才被真正的确定.但是在这里,我们面对的是这 ...

  9. C++ Template之非类型模板参数

    非类型模板参数是通过基本变量类型引入,例如int,在使用时必须显式自定值,不能通过推断. 非类型模板参数的限制:不能是浮点数(在vc6.0上测试可以为浮点型),对象以及指向内部链接对象的指针. #in ...

随机推荐

  1. C#委托之泛型

    using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Cons ...

  2. JAVA基础知识之JVM-——类加载器

    类加载器负责将.class文件加载到内存,并为其创建java.lang.Class对象,这个对象就代表这个类. 在Java中,通过包名+类名来唯一标识一个类,而在JVM中,要用 类加载器实例+包名+类 ...

  3. Java fundamentals of basic IO

    IO is a problem difficult to handle in various of systems because it  always becomes a bottleneck in ...

  4. Uva 1626,括号序列

    题目链接:https://uva.onlinejudge.org/external/16/1626.pdf 题意: 给定一个字符串,看是否括号匹配,不匹配加括号,加最少的括号使得匹配.输出该结果. 分 ...

  5. Linux平台下线程池的原理及实现

    转自:http://blog.csdn.net/lmh12506/article/details/7753952 前段时间在github上开了个库,准备实现自己的线程池的,因为换工作的事,一直也没有实 ...

  6. AutoIt实现selenium上传文件

    1,安装autoIt 2,工程中建文件夹,例如:script,将autoit 复制到该文件夹,并且编辑视频所在的文件夹的路径,编辑"au3"格式的文件 3,编辑完成后生成EXE文件 ...

  7. samba共享服务器搭建 亲手实验

    一.简介 Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的 ...

  8. 你不知道的This和Class

    Oh no....我的This又丢失了??? 为什么我用Class'实例化'出来的对象会相互影响??? ####这些问题都是因为JS的运行机制造成的.在JS中所有的一切都是对象,而this是对象的一个 ...

  9. HTML Meta中添加X-UA-Compatible和IE=Edge,chrome=1有什么作用?

    X-UA-Compatible是自从IE8新加的一个设置,对于IE8以下的浏览器是不识别的.通过在meta中设置X-UA-Compatible的值,可以指定网页的兼容性模式设置. 在网页中指定的模式优 ...

  10. Hibernate 查询语句

    Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性. HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据 ...