C++ 使用#定义时出错

C++ 使用#定义时出错,c++,C++,我定义了一个不在类中的函数 #define BlendLight(b1, b2) std::max(b1, b2) 然后在课堂上我尝试使用它: float someFunk(float x, float y) { return BlendLight(x,y); //Error here - BlendLight marked red ( } 我得到一个错误:需要一个标识符 我正试图在VisualStudio2010中编译此文件 包含std::max()头/I添加了算法,但仍然存在错误((

我定义了一个不在类中的函数

#define BlendLight(b1, b2)  std::max(b1, b2)
然后在课堂上我尝试使用它:

float someFunk(float x, float y)
{
 return BlendLight(x,y); //Error here - BlendLight marked red (
}
我得到一个错误:需要一个标识符

我正试图在VisualStudio2010中编译此文件
包含std::max()头/I添加了算法,但仍然存在错误(((

代码目前并没有错误。很可能您忘记了添加

#include <algorithm>

代码并没有错,很可能是你忘记了

#include <algorithm>

你最好不要使用宏来定义这些定义。这会让你在几周后调试它时感觉很糟糕


不管怎么说,你已经包括了吗?

你最好不要在这些定义中使用宏。这会让你在几周后调试它时感到很糟糕


无论如何,您是否包含了?

我认为您应该在使用
BlendLight(b1,b2)
之前包含
算法,因为您使用了算法库中可用的
max

我认为您应该在使用
BlendLight(b1,b2)之前包含
算法
因为您使用了算法库中提供的
max

您是否忘记在 调用编译器。历史上,VS将最小值和最大值定义为 宏(并在标准标题中抑制其定义),在
,我认为,并且需要上面的选项才能
符合标准。(我没有检查VS 2010中是否仍然存在这种情况,因为我总是系统地定义它。)

您是否忘记在 调用编译器。历史上,VS将最小值和最大值定义为 宏(并在标准标题中抑制其定义),在
,我认为,并且需要上面的选项才能

符合标准。(我没有检查VS 2010中是否仍然是这种情况,因为我总是系统地定义它。)

编译器也有那么挑剔吗?头文件是否带有
std::max()
include?是否将
BlendLight
定义在与
someFunk
相同的文件中?如果
BlendLight
位于头文件中,是否包含该头文件?如果将
return BlendLight(x,y);
替换为
return std::max(x,y)
编译器是否有抱怨?上面的代码在我的系统上运行良好。如果您能详细说明您的问题,效果会更好。编译器也有那么挑剔吗?头文件是否带有
std::max()
include?是否将
BlendLight
定义在与
someFunk
相同的文件中?如果
BlendLight
位于头文件中,是否包含该头文件?如果将
return BlendLight(x,y);
替换为
return std::max(x,y)
编译器是否抱怨?上述代码在我的系统上运行良好。如果你能详细说明你的问题,那就更好了。不,在使用
BlendLight
之前,他应该包括
。不,在使用
BlendLight
之前,他应该包括
。谢谢Nicklas。我正在尝试“翻译”C++的一个目标C项目,为什么我要把代码放在原来的地方。宏仍然不能工作。(即使我写了。也许我会使用你的解决方案,但我认为这种签名中的宏不仅可以比较任何数字类型float@PapaC++有模板,这使宏的大多数用例无效。我更新了答案允许任何数据类型。至于你原来的问题:你在同一个文件中定义了<代码> BLUDLION<代码>吗?是否使用了它?并且,在
someFunk
中将
BlendLight
替换为
std::max
是否也会产生错误?哦..你说得对。当我将其更改为std::max时,它会给我错误(.但是我已经添加了#include!@Papa:you
#include
在使用
std::max
的同一个源文件中,它产生了一个错误?哪个错误?对不起,我犯了一个原始错误..所有的工作都很有趣。再次谢谢你Niklas!谢谢你Nicklas。我正在尝试“翻译”C++的一个目标C项目,为什么我要把代码放在原来的地方。宏仍然不能工作。(即使我写了。也许我会使用你的解决方案,但我认为这种签名中的宏不仅可以比较任何数字类型float@PapaC++有模板,这使宏的大多数用例无效。我更新了答案允许任何数据类型。至于你原来的问题:你在同一个文件中定义了<代码> BLUDLION<代码>吗?是否使用了它?并且,在
someFunk
中将
BlendLight
替换为
std::max
是否也会产生错误?哦..你说得对。当我将其更改为std::max时,它会给我错误(.但是我添加了#include!@Papa:you
#include
在使用
std::max
的同一个源文件中,它会产生一个错误吗?哪个错误?对不起,我犯了一个原始错误..所有的工作都像一个符咒。再次感谢你,Niklas!同意))但请看我对尼古拉斯·鲍姆斯塔克的评论answer@PapaJohn我明白你的意思。不管怎样,如果你同意我的帖子,请给我增加一些声誉。同意),但请看我对尼古拉斯·鲍姆斯塔克的评论answer@PapaJohn我明白你的意思。不管怎样,如果你同意我的帖子,请给我增加一些声誉。