使用#define时出错
Error while using #define
我定义了一个不在类中的函数
#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
。
相关文章:
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 分段错误当我试图运行程序时出错
- 使用dynamic_cast和构造函数时出错
- CHECK(调用)函数在Google Colab中出错
- 用pybind11包装C++抽象类时出错
- 为x86而非x64编译时出错
- 从R调用C++函数并对其进行集成时出错
- 这个函数哪里出错了
- 令牌之前缺少二进制运算符 "#" 当 #define 在 #if 内时出错
- C++ #define 和常量变量相乘时出错
- 在#define中编译时出错
- 使用#define时出错