Nat*_*mon 32 c++ winapi visual-studio
我最近补充说:
#define NOMINMAX
#include <Windows.h>
#include <algorithm>
Run Code Online (Sandbox Code Playgroud)
到我的main.cpp才能使用
std::max( x , x ); // x is just a placeholder and not actual anything
std::min( x , x );
Run Code Online (Sandbox Code Playgroud)
但我不能std::max()/std::min()在其他文件中使用.
error C2589: '(' : illegal token on right side of '::'
error C2059: syntax error : '::'
Run Code Online (Sandbox Code Playgroud)
我试图添加#define NOMINMAX我的其他文件,但失败了.什么是线索?
我问之前环顾四周,但我不明白答案在Visual C++上NOMINMAX可能出现问题
Pet*_*ker 75
如果你真的很绝望,请在函数名称周围加上括号:
(std::min)(x, y);
Run Code Online (Sandbox Code Playgroud)
此语法不适用类似函数的宏.(形式上,要应用类似函数的宏,宏的名称必须后跟可选的空格,然后是'('.)
hmj*_*mjd 23
NOMINMAX通过编译器标志定义:
> cl.exe -DNOMINMAX ...
Run Code Online (Sandbox Code Playgroud)
然后将为所有源文件定义.我不使用IDE,但此页面提供了有关导航IDE以设置此指南的指导:在Windows程序中使用STL可能导致最小/最大冲突 :
只需定义NOMINMAX预处理器符号即可.这可以在"构建","设置"下的"开发人员工作室"项目中,在"预处理器"类别的"C/C++"选项卡上完成.这将抑制Windef.h中的最小和最大定义.
Dav*_*ann 10
如果您定义NOMINMAX,是因为您更喜欢STL版本,那么在包含使用最小/最大宏的gdiplus.h时,您可能会遇到问题。作为解决方案,您需要包括STL标头,并在包括gdiplus.h 之前使用“ using namespace std” 。
例如:
#define NOMINMAX
// Include C++ headers
#include <algorithm>
using namespace std;
// Include Windows headers
#include <windows.h>
#include <gdiplus.h>
Run Code Online (Sandbox Code Playgroud)
在 Visual Studio 中,将“NOMINMAX”添加到 C++ 预处理器属性解决了我的问题。
打开项目属性 -> C/C++ -> 预处理器 -> 预处理器定义 -> 添加“NOMINMAX”。
您的问题很可能是您#define NOMINMAX之后的您#include "windows.h"。首先,这很重要#define。
原因是windows.h(实际上我认为windef.h,它包含在windows.h中)具有类似于以下代码:
#ifndef NOMINMAX
#define min(x,y) ((x) < (y) ? (x) : (y))
#define max(x,y) ((x) > (y) ? (x) : (y))
#endif
Run Code Online (Sandbox Code Playgroud)
所以#define NOMINMAX告诉编译器(或实际预处理器)跳过的定义min和max,但如果你在你面前做只会适用#include "windows.h"。