可能重复:
在C ++中将关键字class用作变量名
我正在使用一个库的C头文件,其中一个变量被命名为“new”。不幸的是,我正在一个C ++项目中使用这个库,'new'作为变量名称的出现使编译器崩溃。我已经使用了extern "C" { #include<...> },但这似乎对此没有帮助。
即使从C开发人员的角度来看,'new'不是C关键字,库开发人员也必须更改该变量的名称吗?
可能重复:
在C ++中将关键字class用作变量名
我正在使用一个库的C头文件,其中一个变量被命名为“new”。不幸的是,我正在一个C ++项目中使用这个库,'new'作为变量名称的出现使编译器崩溃。我已经使用了extern "C" { #include<...> },但这似乎对此没有帮助。
即使从C开发人员的角度来看,'new'不是C关键字,库开发人员也必须更改该变量的名称吗?
new
:#define new mynew
#include <...>
#undef new
这将允许编译继续进行。
你实际上需要访问这个变量吗?如果不需要-那么你完成了。如果需要,那么你需要确保库的.c文件是使用编译器编译的。
-Dnew=mynew
mynew
的变量 :) - dreamlax#define new was_new
。您可以在C中编写自己的包装函数。您使用的所有与库相关的内容都将使用C编写,并具有C++友好的头文件。因此,不要像下面这样:
other_lib.h: int foo( int new );
my_app.cxx: extern "C" { #include <other_lib.h> }
这样是无法编译的,您需要这样做:
my_wrap.h: #ifdef __cplusplus extern "C" { #endif int my_foo( int ); #ifdef __cplusplus } #endif
my_wrap.c: #include <other_lib.h> int my_foo( int x ) { return foo( x ); }
my_app.cxx: #include "my_wrap.h"
...
使用C编译器编译my_wrap.c,然后使用C++编译器编译my_app.cxx。 这样可以在不对现有库进行任何更改的情况下构建。
如果您正在修改第三方库的完好无损的头文件,我建议您现在停止。如果我理解正确,您正在尝试向C库添加C++代码,这是不行的,因为C不认识“new”关键字,它是C++关键字。
相反,我建议:
您可以创建一个单独的C++项目,其中包含一个源文件(*.cpp),将第三方头文件添加到其中,并将库的二进制文件链接(谷歌“链接库”等)到您的项目中。
希望这有点帮助, 祝好
new
? - dreamlax