Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用extern中的函数声明向量;";{}_C++ - Fatal编程技术网

C++ 使用extern中的函数声明向量;";{}

C++ 使用extern中的函数声明向量;";{},c++,C++,我有一个文件(file_A.cpp),其函数体如下: vector<char *> lines_vector; foo(my_file_path, "zzz", lines_vector, fout); 由于FILE_A.cpp使用FILE_B.cpp的函数,因此它包括其标题,问题是: 文件_B.h的所有函数头都位于 #ifdef __cplusplus extern "C" { #endif ... void foo(char * in_file, char * keyword,

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

vector<char *> lines_vector;
foo(my_file_path, "zzz", lines_vector, fout);
由于FILE_A.cpp使用FILE_B.cpp的函数,因此它包括其标题,问题是:

文件_B.h的所有函数头都位于

#ifdef __cplusplus
extern "C" {
#endif
...
void foo(char * in_file, char * keyword, vector<char *>& lines_vector, FILE * fout)
...
#ifdef __cplusplus
};
#endif
\ifdef\uuucplusplus
外部“C”{
#恩迪夫
...
void foo(char*in_文件,char*关键字,向量和行_向量,file*fout)
...
#ifdef_uucplusplus
};
#恩迪夫
当尝试添加我的函数时,它无法识别向量。给出的错误是


1,''>…''之前的声明>代码> >“c”<代码>需要是纯C,不是C++。IANALL,不能说什么是“法律”的C++标准,但是,一些编译器会报告一个错误(他们应该),一些警告,有些只是“继续”,但这是几乎不可能做到这一点,因为<代码> STD::向量< /代码>是一个模板。< /P> < P>问题是:你不能使用C++对象在C接口。那么如何从C端创建这样一个对象呢

因此,您必须将通话改为:

void foo(char * in_file, char * keyword, char **lines_vector, int, lines_vector_size, FILE * fout)
然后,由于您无法将向量映射到缓冲区(),因此要使用
向量
,您需要创建
向量
工作对象并复制数据(只有指针应该是可以的),在算法中使用它,然后将向量数据复制回
行_向量
(或者如果指针没有更改,则什么也不做)

未经测试,我会天真地做如下

void foo(char * in_file, char * keyword, char **lines_array, int, lines_array_size, FILE * fout)
{
     std::vector<char *> lines_vector;
     for (int i=0;i<lines_array_size;i++)
     {
        lines_vector.push_back(lines_array[i]);
     }

}
void foo(char*in\u文件,char*关键字,char**lines\u数组,int,lines\u数组大小,file*fout)
{
std::矢量线\矢量;

对于(inti=0;iC)来说,我不知道模板

std::vector
是一个类模板


因此,在请求与
extern“C”进行类似C的链接时,不可能使用类模板代码>因为它不能区分代码< ST/::vector < >代码>:在没有链接名称的情况下链接器中的向量 .< /p>我敢打赌这不是完全错误。请创建一个来显示我们,然后复制粘贴完整的完整的错误输出,也就是因为您的头文件显然是由C++使用的。RCE文件,以及你提到的源文件都是C++源文件,你需要什么?
for?既然这似乎是一个C++的问题,为什么要使用C语言标记?有些事情你没有告诉我们。@Someprogrammerdude添加了其他错误。至于你的第二个问题,这是一个老项目,我认为
extern“C”是因为有人把它误认为是什么让你认为C abi和C++ abi是相同的?那么,两个abi的用法是什么?
不会神奇地将随附的代码变成C代码。请和。然后请再次学习如何创建。并粘贴完整的错误,无需任何修改或编辑,当然作为文本。
void foo(char * in_file, char * keyword, char **lines_array, int, lines_array_size, FILE * fout)
{
     std::vector<char *> lines_vector;
     for (int i=0;i<lines_array_size;i++)
     {
        lines_vector.push_back(lines_array[i]);
     }

}