我正在CentOS上使用其发行版包中提供的makefile构建一个C程序,没有问题。但是,我需要修改源文件,并且为此目的需要使用iqxmlrpc和boost库。我已经分别更改了makefile,但是当我要构建包时,会出现以下错误:
../src/libiqxmlrpc/libiqxmlrpc/except.h:9:21:错误:stdexcept:没有此类文件或目录
../src/libiqxmlrpc/libiqxmlrpc/except.h:10:18:错误:字符串:没有这样的文件或目录
在../src/libiqxmlrpc/libiqxmlrpc/libiqxmlrpc.h中包含的文件中:17,
来自R.c:2617:
../src/libiqxmlrpc/libiqxmlrpc/except.h:14:错误:“iqxmlrpc”之前应为“=”、“,”、“;”、“asm”或“attribute”
…接着是许多其他的错误。。。
我认为上述错误是因为iqxmlpc是用c++编写的,gcc将其视为c,所以我尝试了以下操作:
1)使用g++
2)使用gcc-x c++
执行上述操作时,错误会在许多头文件中更改为以下内容:
错误:在“this”之前应输入“,”或“…”
编译器抱怨的所有行都以this或delete关键字作为参数。见下文:
int net_route(结构in_addr*dst,int delete);

外部内部gad_new(struct gad_t**this)
你知道我该怎么解决这个问题吗?坦率地说,我不知道使用“this”或“delete”作为参数意味着什么。这些只是gcc忽略了不能使用关键字的规则的参数名吗?
------------------------------
顺便说一句,最初的程序员在整个代码中都使用了嵌套函数,这些函数是用gcc编译的。当我切换到g++时,编译器会抱怨另一个函数中不允许使用函数定义。我能告诉g++忽略这个错误吗?

最佳答案

那些不是C中的关键字,它们是C++。
在代码将在C++中编译之前,您必须重命名这些参数。
在完成之前,您可能会遇到与C++更严格类型检查相关的其他移植问题。
另一个选择是将C和C++代码保存在单独的文件中,并且在每个必须跨越边界的函数调用中使用C++代码中的extern "C"。由于C代码广泛使用嵌套函数和C++中不允许的其他特性,这可能是您最快的方法。

关于c++ - 在C程序中添加C++代码-在“此”之前应为“,”或“…”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33174129/

10-11 18:18