这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请问在VxWorks下做过C++开发的过来人,关于在C中调用C++程序的问题:

共2条 1/1 1 跳转至

请问在VxWorks下做过C++开发的过来人,关于在C中调用C++程序的问题:

菜鸟
2005-06-29 06:35:38     打赏
一般而言要在usrAppInit.c中开始调用用户的应用代码; 也就是归结为在.c文件中调用.cpp文件的问题: 第一种情况:如果只是在.c 中调用.cpp文件中的普通函数 void cppfunction_called_in_c(), 用extern “C” 做一个声明就可以了。 extern “C” void cppfunction_called_in_c() ; 经验证这是可行的。 第二中情况:当想要使用.cpp文件中定义的class 时,问题就出现了。比如如下文件所示, Fred.cpp,Fred.h文件定义了一个类;并且希望在useppc6.c中调用: /*Fred.h*/ /* This header can be read by both C and C++ compilers */ #ifndef FRED_H #define FRED_H #ifdef __cplusplus class Fred { public: Fred(); void wilma(int); private: int a_; }; #else typedef struct {int i; char j;} Fred; #endif #ifdef __cplusplus extern "C" { #endif #if defined(__STDC__) || defined(__cplusplus) extern void c_function(); /* ANSI C prototypes */ #else extern void c_function(); /* K&R style */ #endif #ifdef __cplusplus } #endif #endif /*FRED_H*/ /*Fred.cpp*/ #include "Fred.h" Fred::Fred() : a_(0) { } void Fred::wilma(int a) { } /*usePPC6.h*/ void c_function(); /*usePPC6.cpp*/ #include <vxWorks.h> #include "Fred.h" #include "usePPC6.h" void c_function() { Fred fredObj; fredObj.i=10; //ok,编译结果显示这一行程序正确 fredObj.a_=100; //error!编译结果显示这一行程序错误,说明在Fred.h文件中 #ifdef __cplusplus 未起作用,没有定义类,定义的是结构。 } 各位大侠:我用的Tornado2.2,可以在.cpp文件中调用.cpp文件中定义的类, 问题就出在当在.c文件中调用.cpp文件中的类时,出错。也就是__cplusplus没有定义! 请问1:在Tornado环境中需要认为设定编译器选项吗? 2:如何才能让编译器定义__cpluscplus选项,进而能够使我的程序中的class能够被辨认出来呢? 谢谢各位耐心看完。 [em01]



关键词: 请问     VxWorks     下做     开发     过来人     关于         

菜鸟
2005-07-05 19:32:00     打赏
2楼
vxWorks5.5对C++的支持不好,总会出一些莫名奇妙的错误,还是尽量使用C吧

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]