Qt5.3编译错误——call of overloaded ‘max(int int)’is ambiguous
错误描述:
今天在使用Qt写一个C++函数模板的测试程序的时候,编译的时候,编译的时候出现如下错误:

错误描述为:在main函数中,进行函数max()重载时,出现(ambiguous)含糊的,不明确的;引起歧义的使用;
因为第一次遇到这种错误,写篇内容纪念一下吧。
测试代码如下:
#include <iostream>
using namespace std; template <typename T>//typename == class
T max(T a,T b)
{
return a>b?a:b;
}
int main()
{
int a=,b=;
cout<<max(a,b)<<endl;
cout<<max(,)<<endl;
cout<<max(,)<<endl;
cout<<max(1.1f,2.2f)<<endl;
cout<<max(.11l,.22l)<<endl;
cout<<max('A','C')<<endl;
//上面都是隐式的调用int,float.double.char类型的,而下面必须显示的调用,
//因为1是int类型的,而2.0是double类型的,此时,如果不明确指定数据类型,编译器无法识别。
cout<<max<int>(,2.0)<<endl;
}
单从代码看,我看不出什么错误,而且我记得当初学习C++模板的时候,也是这样写的,只不过,当初使用的IDE是VC6.0,难道环境不同。所以我把代码贴到VC上,测试一下,完美的成功运行了。看来真是IDE不同的问题。但对于Qt,应该有解决办法的,上网找了一下,原来是因为函数名冲突的问题,这里我先说下解决方法。
解决方法:
- 调用时声明名字空间,把max(a,b);改成::max(a,b);前加::,避免冲突
- 改变函数名称,把自定义的函数max改成myMax或其它。
造成问题的原因:
max函数与标准库的std::max函数冲突。
看来Qt中已经有了标准的max()的函数了,我测试了一下,还真有这个函数。
问题深究:
从这个错误中,我们知道自己写的函数名容易和标准库或其他文件里的函数冲突,那么C++是怎么处理函数名冲突的呢?这就用到了命名空间。
名称空间是一项c++de 特性,是用来解决在编写大型程序中不同文件(厂商)中相同变量名问题。 例如:就像我编写的函数max和标准的max,为了能够准确调用其中一个max()函数,我们将这两个函数分别放在不同在命名空间单元中。这样就可以用 "命名空间::函数名" 的方式准确调用所需函数。
- ::max();//调用的自己写的max()
- std::max();//调用的标准模板库的max
我们经常会使用 using namespace std; 其中的std是c++在标准命名空间。
要让程序访问std有以下四种方法:
- 将using namespace std;放在函数定义之前,让文件中所有的函数都能够使用命名空间std中在元素。
- 将using namespace std;放在特定在函数定义中,让该函数能够使用命名空间std中元素。
- 在特定函数中使用using std::cout; 这样的编译指令,让该函数使用命名空间std中所指定在元素,如 cout。这种方法在好处是,防止自己定义的变量名与std中在元素名重复。
- 完全不使用编译指令using,在需要使用std中元素时,使用前缀std::。
通过上面的第4条,这个问题的解决方法还有一种,就是不使用 using namespace std; ,但是cout,cin等一些标准的库函数就不能使用了,所以最好的办法是修改函数名。
Qt5.3编译错误——call of overloaded ‘max(int int)’is ambiguous的更多相关文章
- QT编译错误: multiple definition of `qMain(int, char**)'
QT使用过程中来回添加修改代码,结果出现了编译错误:error: multiple definition of `qMain(int, char**)' 一直看我的源文件是都哪里有错误,最后发现是在p ...
- Qt5.编译错误.error: C2338: The slot requires more arguments than the signal provides.
1.Qt563x86vs2015,遇到如下 编译错误: error: C2338: The slot requires more arguments than the signal provides. ...
- 常见C语言编译错误解析【转】
C语言编译错误信息及说明1. 在函数 ‘transform’ 中:7: 错误:expected ‘;’ before ‘{’ token 解释:‘{’之前的某个语句缺少分号‘;’: 2. 在函数 ...
- xamarin.forms新建项目android编译错误
vs2015 update3 新建的xamarin.forms项目中的android项目编译错误.提示缺少android_m2repository_r22.zip,96659D653BDE0FAEDB ...
- 《转载》使用org.w3c.dom.Element的setTextContent()、getTextContent()方法时出现编译错误
今天在更新项目后进行编译时,出现如下错误一堆: 编译错误 Google之,在stackoverflow上看到如下的解决方法: I came here with the same problem. Ev ...
- asp.net教程:编译错误同时存在于不同dll中
asp.net 编译错误类型“同时存在于”不同的dll中. 出现这种错误大概有三种情况: 1.ASPX页面,一个*.ASPX,对应着一个*.cs文件,两者其实是一个文件,通过两者实现代码分离,每个*. ...
- VS2010出现FileTracker : error FTK1011编译错误的解决办法
VS2010出现FileTracker : error FTK1011不知道是不是vs2010的一个bug,反正有人提交了. FileTracker : error FTK1011编译错误的解决办法有 ...
- PowerDesginer 生成的Oracle 11g 组合触发器代码编译错误(29): PLS-00103
问题描述: 采用PowerDesigner15针对Oracle 11g 创建物理数据模型,想实现一个字段的自增,采用如下步骤: 1.创建序列,命名为Sequence_1; 2.在自增字段编辑窗口中,选 ...
- 我看见的第一个XCODE编译错误 - Command /applications.../clang failed with exit code 1
开始用XCODE学习Apple相关开发的东东,写些demo熟悉Object C,一直还没看见什么问题,昨晚在家把一些demo上传到代码服务器,今天在另外一台机器上下载下来编译,出现了问题: Preco ...
随机推荐
- 解决WampServer中MySQL数据库中文乱码的问题
原文地址:http://blog.csdn.net/qq756703833/article/details/37971057 左键点击托盘区的WampServer图标,选择MySQL--my.ini, ...
- EXCEL的导入导出
using System; using System.Data; using System.Data.OleDb; using System.IO; namespace COMMON { public ...
- Spark难道比oracle性能还差?百万级数据测试性能
本人对大数据方面也是刚刚研究,由于工作需要在实时查询与统计的性能方面要深入学习.现测试性能如下: 环境:VirtualBox host-only ubuntu版本: Linux master 4 ...
- div 指令
div 指令 div 是除法指令,后面跟的是除数,被除数默认在 ax, 或者 dx.ax 组成的存储单元中. 除数可以有 8 位和 16 位两种,存储于一个 reg 或内存单元中,也就是说不可以 di ...
- LinkedHahsMap和HashMap的比较
http://www.cnblogs.com/hubingxu/archive/2012/02/21/2361281.html#commentform 一般情况下,我们用的最多的是HashMap,在M ...
- hadoop搭建初步总结
1.安装JDK1.1上传运用软件FileZilla,将windows上的jdk压缩包放到linux的root目录下 1.2解压jdk #创建文件夹 mkdir /usr/java(不要挂在在" ...
- PerconaXtraBackup 压缩备份集
压缩备份集 stream模式支持且只支持:tar 和 xbstream 两种格式,后者是xtrabackup提供的专有格式,解包时需要同名的专用命令处理 innobackupex --defaults ...
- oracle exists
公司项目中有用到exists,感觉挺有用的,拷贝一些感念的东西. “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T ...
- [UCSD白板题] Fractional Knapsack
Problem Introduction Given a set of items and total capacity of a knapsack,find the maximal value of ...
- golang坑1
:=比较方便,不过今天掉进了一个小坑 var ( foo *XXX ) func bar() { fmt.Println(foo.abc) } func main() { foo, err := XX ...