我目前正在编写一个非常低级的 C 程序与高级 C++ 程序之间的接口。它们的关联方式是通过链表:C 程序有一个链表,接口获取存储在链表中每个节点中的信息并将其转换为 C++ 向量。该过程本身不是程序。问题是如何从 C 程序中调用该 C++ 函数。让我给你一些启示:
int importData(List *head, char * source, char * dest);
在 C++ 文件中声明,称为import_helper.cpp
. 我定义了声明,如上所示,然后是实现,所以编译不会抱怨。在import.c
C 程序中,我试图调用该函数:记住,List 是import.c
现在定义的结构,在import.c
我有:
#if defined(_cplusplus)
extern 'C' {
#endif
typedef struct list{
struct list *next
.. other additional data goes here ...
}List;
int importData(List *head, char *source, char *dest);
#if defined(_cplusplus)
}
#endif
在import_helper.cpp
标题中我做了一个#include "import.c"
. import.c
没有 .h 文件(有人编写了该代码,我个人认为这本身就是一个错误)。
当我编译时,我得到:
error: expected unqualified-id before 'class'
error: conflicts with the new declaration with 'C' linking
error: previous declaration of 'void getPassword(char *)' with 'C++' linkage
那只是一个样本。但是,我相信import.c
是用编译的gcc
,我的Build
文件是import_help.cpp
用g++
. 这可能是原因吗?我有其他类似方法的文件,所以我不太确定。任何想法?谢谢