C和C++混编。未入门,待解决!!有高手可以解决??
/* 2016年7月27日10:28:49 文件"compilation.cpp" */ #include "compilation.h" #include <stdio.h> extern "C" {int add(int x,int y);}//非成员函数 int add(int x,int y) { return x + y; } //以下为成员函数 double C::f(int i) { add(i); printf("Hello World! \n%d\n",i); return i; } double C::f(double i) { add(i); printf("Hello World! \n%f\n",i); return i; } void C::add(int &a) { a += 1; } void C::add(double &a) { a += 1.1; } void C::k(int i) { printf("k\n"); } extern "C" double call_C_f_i(C* p, int i) // wrapper function { return p->f(i); } extern "C" double call_C_f_d(C* p, double i)// wrapper function { return p->f(i); } extern "C" void call_virtual_k(C* p,int i) { p->k(i); }
/* 2016年7月27日10:29:16 文件"comilation.h" */ #ifndef _COMPILATION_H_ #define _COMPILATION_H_ class C { public: double f(int); double f(double); virtual void k(int); private: void add(int &a); void add(double &a); }; #endif
/* 2016年7月27日9:38:30 文件"main.c" 说明 混合编译:在C中调用C++成员函数,非成员函数 未解决的问题: 虚函数未能实现调用 */ #include <stdio.h> /*#include "compilation.h",本来C语言就没有类的说法,所以就不需要包含头C++头文件了,处理方法是将C++成员函数转换成C函数*/ extern int add(int x,int y); extern double call_C_f_i(struct C* p, int i); extern double call_C_f_d(struct C* p, double i); extern void call_virtual_k(struct C* p,int i); int main(void) { printf("%d\n",add(2,1));//调用非成员函数 printf("%f\n",call_C_f_i(NULL,10));//调用成员函数 printf("%f\n",call_C_f_d(NULL,10.1)); //call_virtual_k(NULL,29);//此处未能是实现调用 return 0; } /* 在vc++6.0中的结果是: 3 Hello World! 11 11.000000 Press any key to continue */