C++ c和c++;混合的

C++ c和c++;混合的,c++,c,interface,mixing,C++,C,Interface,Mixing,我需要从c文件中调用cpp方法。 我已经为此编写了此接口 cpp文件 extern "C" void C_Test(int p){ Class::CPP_Test(p); } c文件 extern void C_Test(int p); void C_Function(){ C_Test(10); //error } 我在c文件“未定义对c_测试(int)的引用”中出错 有什么问题吗?您必须仅为函数原型声明extern,并确保链接正确。在这种情况下,CPP_Test(p

我需要从c文件中调用cpp方法。 我已经为此编写了此接口

cpp文件

extern "C" void C_Test(int p){
      Class::CPP_Test(p);
}
c文件

extern void C_Test(int p);


void C_Function(){
   C_Test(10); //error
}
我在c文件“未定义对c_测试(int)的引用”中出错


有什么问题吗?

您必须仅为函数原型声明extern,并确保链接正确。在这种情况下,CPP_Test(p)必须是类的静态成员,否则代码将无法工作。最后,外部“C”必须将其内容括在括号中,更像

extern "C"
{
  void C_Test(int p)
  {
    Class::CPP_Test(p);
  }
}

<>请告诉我们这是否有效。

你是否同时编译C++编译器?C++编译器可以编译C++源文件C++,在这种情况下,它将执行名称的修改,所以你需要用C编译器编译C源文件。

< p>我对两种类型的文件都使用C++编译器。
没有“C”它就可以工作!!也没有外部“c”它工作

你需要显示关于如何编译和链接的信息。你没有链接所有的东西。我正在使用C++编译器来对这两种文件进行编译。没有“C”它就可以工作!!也没有外部“c”它工作@梅隆,因为你的伤口是一样的。您的外部“C”需要位于声明函数的.hpp和.cpp文件中。我看到它们被损坏并添加前缀(我认为Visual Studio可能来自内存,或者可能来自Borland),因此即使您将“C”外部化,您的函数也可能是_C_Test(int)。看看你的设置。同时检查地图文件以查看正在导出的符号。这很容易混淆。在你的问题中,你需要从C文件中调用C++函数,即使用C和C++编译器。现在你说你只使用C++编译器。这是什么意思?