原则:“模板参数推导机制无法推导函数的返回值类型”
版本一:
// 缺少<T> 参数 int n 对比第三个版本( 缺少<T> 参数 T n) !
编译错误提示:
错误 1 error C2783: “T FibRecursion(int)”: 无法为“T”推导 模板 参数 c:usersyidocumentsvisual studio 2005projects斐波纳契数列斐波纳契数列斐波纳契数列.cpp 16
1 #include "stdafx.h" 2 #include <iostream> 3 4 template<class T> 5 T FibRecursion(int n) // 参数 int n 6 { 7 if (n<0) 8 return -1; 9 10 if (n == 0 || n == 1) 11 return 1; 12 13 return FibRecursion(n-1) + FibRecursion(n-2); // 缺少<T> 14 } 15 int _tmain(int argc, _TCHAR* argv[]) 16 { 17 int result = FibRecursion<int>(30); //错误行 18 system("pause"); 19 return 0; 20 }
版本二:
// 加上<T> 参数 int n 或者 T n
编译通过!
1 #include "stdafx.h" 2 #include <iostream> 3 4 template<class T> 5 T FibRecursion(int n) // 参数 int n 6 { 7 if (n<0) 8 return -1; 9 10 if (n == 0 || n == 1) 11 return 1; 12 13 return FibRecursion<T>(n-1) + FibRecursion<T>(n-2); // 加上<T> 14 } 15 int _tmain(int argc, _TCHAR* argv[]) 16 { 17 int result = FibRecursion<int>(30); //没有报错 18 system("pause"); 19 return 0; 20 }
1 #include "stdafx.h" 2 #include <iostream> 3 4 template<class T> 5 T FibRecursion(T n) // 参数 T n 6 { 7 if (n<0) 8 return -1; 9 10 if (n == 0 || n == 1) 11 return 1; 12 13 return FibRecursion<T>(n-1) + FibRecursion<T>(n-2); // 加上<T> 14 } 15 int _tmain(int argc, _TCHAR* argv[]) 16 { 17 int result = FibRecursion<int>(30); //没有报错 18 system("pause"); 19 return 0; 20 }
版本三:
// 缺少<T> 参数 T n
编译通过!
1 #include "stdafx.h" 2 #include <iostream> 3 4 template<class T> 5 T FibRecursion(T n) // 参数 T n 6 { 7 if (n<0) 8 return -1; 9 10 if (n == 0 || n == 1) 11 return 1; 12 13 return FibRecursion(n-1) + FibRecursion(n-2); // 缺少<T> 14 } 15 int _tmain(int argc, _TCHAR* argv[]) 16 { 17 int result = FibRecursion<int>(30); //没有报错 18 system("pause"); 19 return 0; 20 }
http://bbs.sjtu.edu.cn/bbstcon,board,C,reid,1293357257.html 没看懂,囧!