将c ++字符串与c混合

时间:2016-04-28 07:35:43

标签: c++ c

我有一个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中),编译器抛出错误,说致命错误:字符串:没有这样的文件或目录

是否有一些包装机制可以克服这种情况?

1 个答案:

答案 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