在 C 程序中添加 C++ 代码 - 在“this”之前应使用“,”或“...”

Adding C++ code in C program - expected ‘,’ or ‘...’ before ‘this’

我正在使用其发行包中提供的 Makefile 在 CentOS 上构建一个 C 程序,没有问题。但是我需要修改源文件,为此我需要使用 iqxmlrpc 和 boost 库。我已经分别更改了 Makefiles,但是当我想构建包时,出现以下错误:

../src/libiqxmlrpc/libiqxmlrpc/except.h:9:21: error: stdexcept: No such file or directory ../src/libiqxmlrpc/libiqxmlrpc/except.h:10:18: error: string: No such file or directory In file included from ../src/libiqxmlrpc/libiqxmlrpc/libiqxmlrpc.h:17, from redir.c:2617: ../src/libiqxmlrpc/libiqxmlrpc/except.h:14: error: expected '=', ',', ';', 'asm' or 'attribute' before 'iqxmlrpc'
... followed by many other errors ...

我认为上述错误是因为 iqxmlpc 是用 C++ 编写的,而 gcc 将其视为 C,所以我尝试了以下操作:
1) 使用 g++
2) 使用 gcc -x c++
如上操作,在很多头文件中报错如下:

error: expected ‘,’ or ‘...’ before ‘this’

编译器抱怨的所有行都以某种方式将 this 或 delete 关键字作为参数。见下文:

int net_route(struct in_addr *dst, int delete);
or
extern int gad_new(struct gad_t **this)

你知道我该如何解决这个问题吗?坦率地说,我不知道使用 'this' 或 'delete' 作为参数意味着什么。这些是 gcc 忽略我们不能使用关键字的规则的唯一参数名称吗?

-----------------------------
顺便说一句,原来的程序员在他的所有代码中都使用了嵌套函数,这些代码使用 gcc 编译得很好。当我切换到 g++ 时,编译器抱怨另一个函数中不允许使用函数定义。有什么方法可以让 g++ 忽略这个错误吗?

那些不是 C 中的关键字,而是 C++ 中的关键字。

在 C++ 中编译代码之前,您必须重命名这些参数。

您可能 运行 在完成之前解决与 C++ 更严格的类型检查相关的其他移植问题。

另一种选择是将 C 和 C++ 代码保存在单独的文件中,并在 C++ 代码中为每个必须跨越边界的函数调用使用 extern "C"。由于您的 C 代码广泛使用嵌套函数和其他 C++ 不允许的功能,这可能是您最快的方法。

thisdelete 是 C++ 中的保留关键字(在 C 中不是,但 )。使用 g++.

编译时不能将它们用作变量名

最好在参数中使用不同的变量名,然后用g++编译。