在C程序中添加C ++代码 - 在'this'之前预期','或'...'

时间:2015-10-16 15:25:07

标签: c++ c gcc g++

我正在使用在其发行版包中提供的Makefiles在CentOS上构建一个没有问题的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中包含的文件中,                    来自redir.c:2617:   ../src/libiqxmlrpc/libiqxmlrpc/except.h:14:错误:预期' =',',',';',&# 39; ASM'或' 属性'之前' iqxmlrpc'   
  ......其次是许多其他错误......

我相信上面的错误是因为iqxmlpc是用c ++编写的,而gcc将它视为C,所以我尝试了以下内容:
1)使用g ++
2)使用gcc -x c ++
如上所述,错误会在许多头文件中更改为以下内容:

  

错误:在'this'之前预期','或'...'

编译器抱怨的所有行都有这个或删除关键字作为参数。见下文:

  

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

你知道我该如何解决这个问题吗?坦率地说,我不知道使用'这个'或者'删除'意思是参数。这些参数名称只是gcc忽略了我们不能使用关键字的规则吗?

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

2 个答案:

答案 0 :(得分:2)

那些不是C中的关键字,它们都是C ++。

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

在完成之前,您可能会遇到与C ++更严格的类型检查相关的其他移植问题。

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

答案 1 :(得分:0)

thisdelete是C ++中的保留关键字(不在C中)。使用g++编译时,不能将它们用作变量名。

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