【发布时间】:2009-11-30 00:44:20
【问题描述】:
我正在使用一个重新定义 NULL 的库。它会导致我程序的其他部分出现一些问题。我不确定我能做些什么。任何的想法?我的程序是 C++,库是 C。
#ifdef NULL
#undef NULL
#endif
/**
* NULL define.
*/
#define NULL ((void *) 0)
哦,它会产生这些错误:
Generic.h:67: error: default argument for parameter of type 'LCD::LCDBase*' has type 'void*'
Generic.cpp: In constructor 'LCD::Generic::Generic(std::string, Json::Value*, int, LCD::LCDBase*)':
Generic.cpp:44: error: invalid conversion from 'void*' to 'QObject*'
Generic.cpp:44: error: initializing argument 2 of 'LCD::LCDWrapper::LCDWrapper(LCD::LCDInterface*, QObject*)'
Generic.cpp: In member function 'void LCD::Generic::BuildLayouts()':
Generic.cpp:202: error: invalid conversion from 'void*' to 'LCD::Widget*'
Generic.cpp: In member function 'void LCD::Generic::AddWidget(std::string, unsigned int, unsigned int, std::string)':
Generic.cpp:459: error: invalid conversion from 'void*' to 'LCD::Widget*'
scons: *** [Generic.o] Error 1
这是第一个:
Generic(std::string name, Json::Value *config, int type, LCDBase *lcd = NULL);
编辑:好的,显式转换有效,但是如何转换函数指针?
【问题讨论】:
-
你有没有试过在包含 NULL 后取消定义它?
-
我不确定将其重新定义为什么。我尝试在 ORG_NULL 中保存 NULL 并在包含 libvisual 后重新定义 NULL,但这不起作用。
-
其实我想我只要适当地强制转换 NULL 就可以了。
-
附带说明:如果可能,请与图书馆作者交流。他们没有充分的理由应该重新定义 NULL - 它已经定义了。如果他们真的需要自己的常量,他们应该给它起个别的名字,这样就不会干扰了。
-
#define ORG_NULL NULL不保存任何东西,顺便说一句,cpp 不是那么简单:P。您可以使用任何有效的 NULL 定义,例如0;但是,最好的解决方案仍然是修复库。
标签: c++ c null undefined c-preprocessor