函数模版template学习中的一个编译问题
2013-12-03 10:05
302 查看
c++学习函数模版的时候,写了一个交换函数的程序,函数为swap(),目的是交换两个数据。
源程序:
只见代码的话,语法什么的都是没有问题的。但是编译的时候却出现了六个错误!!
原因是什么呢?
原因是函数调用有歧义,也就是说swap函数在VC的STL已经是一个API函数。而且定义上面的定义一样,所以会发生歧义。最简单的解决方法当然是把函数名改了就行了,只要比如改成Two_swap()是没有问题的。当然如果已经写成这样的,不想改的话,可以添加,就是用自己的命名空间把函数包围起来,调用的时候再加上就可以了。
例如:
这样运行是没有问题的,这里就不截图了。
源程序:
#include<iostream> using namespace std; template < class T > void swap(T& x, T& y) { T t; t = x; x = y; y = t; } int main() { int a = 1,b = 2; double i = 1.1,j = 2.2; char ch1 = 'A',ch2 = 'B'; swap(a,b); swap(i,j); swap(ch1,ch2); cout<<a<<" "<<b<<endl; cout<<i<<" "<<j<<endl; cout<<ch1<<" "<<ch2<<endl; return 0; }
只见代码的话,语法什么的都是没有问题的。但是编译的时候却出现了六个错误!!
原因是什么呢?
原因是函数调用有歧义,也就是说swap函数在VC的STL已经是一个API函数。而且定义上面的定义一样,所以会发生歧义。最简单的解决方法当然是把函数名改了就行了,只要比如改成Two_swap()是没有问题的。当然如果已经写成这样的,不想改的话,可以添加,就是用自己的命名空间把函数包围起来,调用的时候再加上就可以了。
例如:
#include<iostream> using namespace std; namespace Test //自定义命名空间将函数包围 { template < class T > void swap(T& x, T& y) { T t; t = x; x = y; y = t; } using namespace Test; //这行也必须有 } int main() { int a = 1,b = 2; double i = 1.1,j = 2.2; char ch1 = 'A',ch2 = 'B'; Test::swap(a,b); //注意调用的形式 Test::swap(i,j); Test::swap(ch1,ch2); cout<<a<<" "<<b<<endl; cout<<i<<" "<<j<<endl; cout<<ch1<<" "<<ch2<<endl; return 0; }
这样运行是没有问题的,这里就不截图了。
相关文章推荐
- template学习之零值初始化及字符串常量作(function template argument)函数模版参数问题
- [转]C++ Template学习笔记之函数模板(5)——模板编译模式
- Golang学习之同一个package中函数互相调用的问题
- 请教一个sizeof在模版函数内无法正常获取大小的问题。
- C语言学习4: 函数返回值与传入参数,关于函数值传递和类型隐性转换,变量不同的作用域,static变量,多文件编译例如两个C文件,显示函数调用语句跳转,递归,斐波那契数列,多文件编译相同变量的问题。
- C++ Template学习笔记之函数模板(5)——模板编译模式
- 一个 Android程序员的小程序入门学习笔记『二』(template 模版的使用注意)
- shell学习三十一天----函数问题
- java 设计模式学习笔记十四 template模版模式
- 用javascript的ShowModalDialog()函数去显示一个aspx页面时缓存的问题
- 一个简单的函数模版
- 高德2d地图SDK2.3中C++函数编译不过的问题
- Antlr学习中遇到的问题1--.java文件无法通过编译
- 学习笔记 “写一个函数获取某一张指定的网卡的IP地址”
- VS编译错误:“到内置类型的函数样式转换只能接受一个参数”解决方案
- Javascript-Mozilla和IE中的一个函数直接量的问题分析
- osg学习示例之遇到问题四骨骼动画编译osgCal
- 一个使用FFmpeg库读取3gp视频的例子-Android中使用FFmpeg媒体库(三).so文件编译过程问题的解决
- C++ Template之函数模版
- spark学习4之集群上直接用scalac编译.scala出现的MissingRequirementError问题(已解决)