不知道哪里出了问题求大佬告知
本帖最后由 SHARK_8 于 2018-3-31 11:09 编辑#include <iostream>
template <typename T>
int add(T , T);//以函数模板形成定义为实例化
template int add<int> (int, int);//显示实例化
template <> int add<double>(double,double);//显示具体化
double add(double a, double b);//普通函数
int main()
{
std::cout << add(1.0,2.0) << std::endl ;//用普通函数
return 0;
}
template <typename T>
int add(T a, T b)
{
std::cout << "正在使用模板";
return a+b;
}
template <> int add<double>(double a,double b)
{
std::cout << "正在使用显示具体化";
return a+b;//不同的方法
}//具体化另外定义
double add(double a, double b)
{
std::cout << "正在使用普通函数";
double total= a+b;
return total;
}
编译 使用dev成功了!! 调试没问题呀!你的问题是 本帖最后由 SHARK_8 于 2018-3-31 10:11 编辑
ba21 发表于 2018-3-31 10:05
调试没问题呀!你的问题是
ba21 发表于 2018-3-31 10:05
调试没问题呀!你的问题是
-----------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
Cpp1.cpp
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(12) : error C2556: 'double __cdecl add(double,double)' : overloaded function differs only by return type from 'int __cdecl add(double,double)'
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(10) : see declaration of 'add'
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(12) : error C2371: 'add' : redefinition; different basic types
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(10) : see declaration of 'add'
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(16) : error C2893: Failed to specialize function template 'int __cdecl add(T,T)'
With the following template arguments:
'double'
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(35) : error C2556: 'double __cdecl add(double,double)' : overloaded function differs only by return type from 'int __cdecl add(double,double)'
C:\Users\Administrator\Desktop\C++\新建文件夹\Cpp1.cpp(10) : see declaration of 'add'
执行 cl.exe 时出错.
Cpp1.obj - 1 error(s), 0 warning(s)
应该是你定义的这几个函数有重复的,编译器不知道你用哪个函数 alltolove 发表于 2018-3-31 10:27
应该是你定义的这几个函数有重复的,编译器不知道你用哪个函数
理论上是可以的吧。。。 ba21 发表于 2018-3-31 10:05
调试没问题呀!你的问题是
你的编译器是什么 SHARK_8 发表于 2018-3-31 11:09
你的编译器是什么
为什么不这样
#include <iostream>
template <typename T>
T add(T a, T b);//以函数模板形成定义为实例化
double add(double a, double b);//普通函数
int main()
{
std::cout << add(1,2) << std::endl ;//用普通函数
return 0;
}
template <typename T>
T add(T a, T b)
{
std::cout << "正在使用模板";
return a+b;
}
double add(double a, double b)
{
std::cout << "正在使用普通函数";
double total= a+b;
return total;
}
页:
[1]