本文主要是介绍VC++:C2589 “(”:“::”右边的非法标记问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在C++ 工程中,遇到了一个编译问题:
error C2589: “(”: “::”右边的非法标记
error C2059: 语法错误 : “::”
原因:
函数模板max与Visual C++中的全局的宏max****冲突。
模板就是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数, 从而实现了真正的代码可重用性。模版可以分为两类,一个是函数模版,另外一个是类模版。
解决办法:
- 设置项目属性,在预定义处理器中添加定义NOMINMAX来禁止使用Visual C++的min/max宏定义。
项目属性 ——> C/C++ ——> 预处理器 ——> 预处理器定义 (此处添加预定义编译开关 NOMINMAX)
但是visual C++中定义能自动匹配double和int,如果进行了上述设置,代码中手动将int型的数据乘以1.0来达到double的目的。
- 加上括号,与Vsual C++的min/max宏定义区分开
举个栗子:
// 原始
float data_max = std::max(a1,a2);
修改为:
float data_max = (std::max)(a1,a2);
这样,就可以正常编译,运行啦。
参考:http://blog.csdn.net/xidianzhimeng/article/details/21181279
这篇关于VC++:C2589 “(”:“::”右边的非法标记问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!