我有一个c和cpp文件
mycpp.cpp
fun()
{
//code goes here....
}
mycpp.h
#include<string>
struct str{
std::string a;
};
func();
myc.c
#include "mycpp.h"
func();
//with other c codes..
这是大型代码列表的一部分。所以它通过c ++和c编译。 我的问题是mycpp.h是通过myc.c编译的(包含在myc.c中),编译器抛出错误,说致命错误:字符串:没有这样的文件或目录
是否有一些包装机制可以克服这种情况?
答案 0 :(得分:4)
您不能在C文件中包含C ++头文件。
使用C链接声明函数func()
,并将其称为C文件中的extern函数。
示例:
mycpp.cpp
void func(void)
{
/* foo */
}
mycpp.h
extern "C" void func(void);
myc.c
extern void func(void);
/* you can now safely call `func()` */
你不能在C中使用std::string
,如果你想访问你的字符串,你必须将它相应地传递给你的C代码,方法是将char const*
传递给字符串的内容。您可以通过调用std::string::c_str()
来访问此字符串。您可以详细了解c_str()
here。