我已经定义了一个不在类
中的函数#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()标头/我已添加算法但仍然存在错误((
答案 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
。