首页 > 解决方案 > 在 extern "C"{} 中声明一个使用向量的函数

问题描述

我有一个文件(FILE_A.cpp),其函数主体如下:

vector<char *> lines_vector;
foo(my_file_path, "zzz", lines_vector, fout);

foo在另一个文件(FILE_B.cpp)中定义:

void foo(char * in_file, char * keyword, vector<char *>& lines_vector, FILE * fout)

由于FILE_A.cpp使用FILE_B.cpp的功能,它包括它的标题,这里的问题是:

FILE_B.h 的所有函数头都在一个

#ifdef __cplusplus
extern "C" {
#endif
...
void foo(char * in_file, char * keyword, vector<char *>& lines_vector, FILE * fout)
...
#ifdef __cplusplus
};
#endif

并且在尝试添加我的函数时,它无法识别向量。给出的错误是

1) 在 '<' 标记之前预期的 ',' 或 '...'

2) '}' 标记之前的预期初始化程序

3) 'vector' 没有被声明

这让我怀疑extern C无法解析这个。在里面使用 cpp 对象extern "C" {}有问题还是这里有其他问题?

标签: c++

解决方案


内部的声明extern "C"必须是C,而不是 C++。IANALL,不能说 C++ 标准的“法律”是什么,但是,一些编译器会报告错误(他们应该),有些是警告,有些会“继续”,但是,几乎不可能这项工作,因为std::vector<>是一个模板。


推荐阅读