2016-04-28 64 views
0

我有交流和CPP文件混合C++字符串使用C

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

檢查[this](http://stackoverflow.com/a/16058799/4790490),它可能會有所幫助。 – Hearty

+2

你在C中包含C++結構,你期望什麼?他們是不同的語言,當然這是行不通的。 – Leandros

+0

您不能混用2種語言。您可以使用標準C++編譯器(如g ++)編譯C,但反之亦然。 – FrenchFalcon

回答

4

您不能在C文件中包含C++頭文件。

用C鏈接聲明函數func(),並將其稱爲C文件內的外部函數。

實施例:

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