当前位置:  技术问答>linux和unix

c++与C的混合调用问题

    来源: 互联网  发布时间:2017-05-10

    本文导语:   最近再看一个项目的代码,并做了一些修改,出现了问题:有一个C++的头文件a.h,这个头文件被c和C++文件同时包含,因为这个a.h里的结构体中只有一些基本的数据类型和一些宏定义,所以编译是正常的,但是由于我...

 最近再看一个项目的代码,并做了一些修改,出现了问题:有一个C++的头文件a.h,这个头文件被c和C++文件同时包含,因为这个a.h里的结构体中只有一些基本的数据类型和一些宏定义,所以编译是正常的,但是由于我需要修改代码,就在a.h中加入了C++的vector头文件,用到了vector容器,于是在那些包含了该头文件的C文件就报错。提示说:fatal error: vector :No such file or directory
  我也在网上查了一些关于C++与C混用的讲解,但是基本上都是对于具体的函数,具体的结构体的相互引用,没有说这种C++标准库函数该怎么被C包含,不知道这个问题可以不可以被解决?如果可以,我该怎么做?请大家帮忙。
修改后的代码(就增加红色部分的两行代码,还有#include):
struct ceph_mds_reply_inode {
__le64 ino;
__le64 snapid;
__le32 rdev;
__le64 version;                /* inode version */
__le64 xattr_version;          /* version for xattr blob */
struct ceph_mds_reply_cap cap; /* caps issued for this inode */
vector size;
vector ono;
struct ceph_timespec ctime, mtime, atime;
__le32 time_warp_seq;
__le64 size, max_size, truncate_size;
__le32 truncate_seq;
__le32 mode, uid, gid;
__le32 nlink;
__le64 files, subdirs, rbytes, rfiles, rsubdirs;  /* dir stats */
struct ceph_timespec rctime;
struct ceph_frag_tree_head fragtree;  /* (must be at end of struct) */
} ;


修改前的代码:
struct ceph_mds_reply_inode {
__le64 ino;
__le64 snapid;
__le32 rdev;
__le64 version;                /* inode version */
__le64 xattr_version;          /* version for xattr blob */
struct ceph_mds_reply_cap cap; /* caps issued for this inode */
struct ceph_timespec ctime, mtime, atime;
__le32 time_warp_seq;
__le64 size, max_size, truncate_size;
__le32 truncate_seq;
__le32 mode, uid, gid;
__le32 nlink;
__le64 files, subdirs, rbytes, rfiles, rsubdirs;  /* dir stats */
struct ceph_timespec rctime;
struct ceph_frag_tree_head fragtree;  /* (must be at end of struct) */
} ;

|


该文件同时被C和C++引用。。


改成cpp,c部分又编译不过了。

|
我能告诉你的是C++兼容C,但是C并不完全兼容C,寄出的#define, int等类型到无所谓,特别是你说的这种涉及到C++的数据结构,vector是模板类,在.c里面,template,class肯定会报错。

|
把 c 文件改为 cpp 文件,用 g++ 编译

|
为什么不使用条件编译?
#ifdef __cplus__
    vector size;
    vector ono;
elseif
    char reserved[size];
endif


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。














站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,