c++ - 返回引用的函数不适用于 window.h

标签 c++ visual-studio function reference

1: #include <windows.h>

2: int& max(int& a, int& b)
3: {
4:   return a > b ? a : b;
5: }

6: int main()
7: {
8:   return 0;
9: }

Visual Studio 2008 Express 版喊道:

1>e:...\main.cpp(2) : 错误 C2062: 类型“int”意外

1>e:...\main.cpp(2) : 错误 C2062: 类型“int”意外

1>e:...\main.cpp(2):错误 C2059:语法错误:')'

1>e:...\main.cpp(3) : 错误 C2143: 语法错误 : 缺少 ';'在“{”之前

1>e:...\main.cpp(3) : 错误 C2447: '{' : 缺少函数头(旧式正式列表?)

如果我用 stdio.h 或 iostream 替换 windows.h (或者删除它),它似乎可以工作

这是为什么?

最佳答案

#include <windows.h>

#undef min
#undef max

int & max(int& a, int& b)
{
    return a > b ? a : b;
}
int main()
{
    return 0;
}

<windows.h>定义 max 的宏和min这会干扰你的。

其他方式

  • 重命名您的函数。

  • 使用NOMINMAX 。这是建议使用一些自行定义最小值和最大值的 STL header 的常见解决方案。

    #define NOMINMAX
    #include <windows.h>
    

关于c++ - 返回引用的函数不适用于 window.h,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16133265/

相关文章:

c# - 单元测试 - 让单元测试调用其他单元测试是一种不好的形式吗

c# - 如何在不使用 Azure 的情况下在控制台应用程序的 Visual Studio 2015 诊断工具窗口中查看 SQL 事件(Application Insights)?

c# - 更改 WinForms 按钮高亮颜色

c++ - 转到基于范围的 for 循环中的下一个迭代器

c++ - Array of array 和过滤性能

r - deparsed match.call 到命名列表

c++ - 允许各种函数类型的非类型模板参数?

c++ - 给定范围内的随机数生成器

c++ - 如何从无符号变量写入和读取字节

c++ - 这个模板 "specialization"代码在做什么,为什么它可以编译但不能按预期工作?