使用#define时出错

Error while using #define

本文关键字:出错 #define 使用      更新时间:2023-10-16

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

#define BlendLight(b1, b2)  std::max(b1, b2)

然后在课堂上我尝试使用它:

float someFunk(float x, float y)
{
 return BlendLight(x,y); //Error here - BlendLight marked red (
}

我得到错误:需要一个标识符

我正在尝试在Visual Studio 2010中编译此std::max()标头已包含/我有添加算法,但错误仍然存在((

目前的代码没有错误。很可能你忘记了

#include <algorithm>

这是定义std::max的头文件。

另一种可能性是,您没有在与要使用BlendLight的类相同的文件中定义CCD_2。在这种情况下,您必须将定义BlendLight的头文件#include

除此之外,您应该知道您定义的不是函数,而是预处理器宏。在C++中,您应该为这个任务使用一个合适的(可能是inline)函数,这样您的编译器就可以进行类型检查:

#include <algorithm>
// ...
template <class T>
T BlendLight(T x, T y)
{
  return std::max(x, y);
}

当调用编译器。从历史上看,VS将min和max定义为宏(并在标准标头中取消其定义),在我认为<windows.h>需要上述选项符合标准。(我没有检查VS 2010中是否仍然是这种情况,因为我总是系统地定义它。)

您最好不要将宏用于此类定义。几周后调试它会让你很痛苦。

不管怎样,你包括在内了吗?

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