c++ - 在 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" {}
有问题还是这里有其他问题?
解决方案
内部的声明extern "C"
必须是纯C,而不是 C++。IANALL,不能说 C++ 标准的“法律”是什么,但是,一些编译器会报告错误(他们应该),有些是警告,有些会“继续”,但是,几乎不可能这项工作,因为std::vector<>
是一个模板。
推荐阅读
- python - 在 Debian 9“Strech”中安装 w3af?
- javascript - 在 HTML 文件中移动 JavaScript 会导致悬停问题
- r - 与两列连接表一致的事件序列
- php - MongoDB - 如何在 PHP 中正确格式化对象 ID 以在 React 中使用?
- c - 20000000 个元素限制的数组
- sql-server - 如何从多个表中提取数据?
- android - 广告在其他设备上展示,但在我的设备上不展示我的应用
- charts - 如何串联显示y轴值
- playframework - 在 Play 框架中创建可公开访问的依赖项许可证报告
- kotlin - 为什么 Kotlin 有 .length 用于 String 和 .size 用于集合?