C++由于支持函数函数重载,因此函数被编译后与C语言的函数被编译后的命名规则不一样,C直接调用C++函数,链接时无法找到C++函数:
//f.cpp
#include <iostream>
#include "f.h"
using namespace std;
class A{
public:
A(int d):m_data(d)
{}
void pOut()
{
cout<<"m_data is "<<m_data<<endl;
}
private:
int m_data;
};
void func()
{
A a(10);
a.pOut();
}
//f.h
void func();
//m.c
#include "f.h"
int main()
{
func();
return 0;
}
编译报错:
m.c:4: undefined reference to `func'
解决此问题,需要在声明接口函数时使用extern “C”进行声明