使用#define时出错

时间:2012-01-23 11:16:46

标签: c++

我已经定义了一个不在类

中的函数
#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()标头/我已添加算法但仍然存在错误((

4 个答案:

答案 0 :(得分:3)

代码并不是错误的。很可能你忘记了

#include <algorithm>

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

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

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

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

答案 1 :(得分:3)

您是否忘记在命令行中添加/DNOMINMAX 调用编译器。从历史上看,VS已将min和max定义为 宏(并在标准头中抑制它们的定义),in 我认为<windows.h>,并且需要上述选项才能成为 符合标准。 (我没有检查VS 2010中是否仍然如此,因为我总是系统地定义它。)

答案 2 :(得分:0)

最好不要将宏用于此类定义。几周后调试它会让你感到非常糟糕。

无论如何,你收到了吗?

答案 3 :(得分:0)

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