2016-04-28 11 views
0

Ich habe ac und CPP-DateiMischen C++ String mit 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.. 

Dies ist ein Teil der großen Codeliste. Also wird es über C++ und c kompiliert. Mein Problem ist, wenn mycpp.h durch myc.c kompiliert wird (die in myc.c enthalten ist), wirft Compiler eine Fehlermeldung, fatale Fehler: string: Keine solche Datei oder das Verzeichnis

Gibt es einen Wrapper-Mechanismus um dieses Szenario zu überwinden?

+1

Check [this] (http://stackoverflow.com/a/16058799/4790490), könnte es helfen. – Hearty

+2

Sie schließen C++ - Konstrukte in C ein, was erwarten Sie? Sie sind verschiedene Sprachen, natürlich funktioniert es nicht. – Leandros

+0

Sie können 2 Sprachen nicht mischen. Sie können C mit Standard-C++ - Compilern wie g ++ kompilieren, aber nicht umgekehrt. – FrenchFalcon

Antwort

4

Sie können keine C++ - Headerdatei in eine C-Datei einschließen.

Deklarieren Sie die Funktion func() mit C-Verknüpfung, und bezeichnen Sie es als eine externe Funktion in Ihrer C-Datei.

Beispiel:

mycpp.cpp

void func(void) 
{ 
    /* foo */ 
} 

mycpp.h

extern "C" void func(void); 

myc.c

Sie können std::string nicht in C verwenden, wenn Sie auf Ihre Zeichenfolge zugreifen möchten, müssen Sie sie entsprechend in Ihren C-Code übergeben, indem Sie eine char const* mit dem Inhalt der Zeichenfolge übergeben. Sie können auf diese Zeichenfolge zugreifen, indem Sie std::string::c_str() aufrufen. Sie können mehr über c_str()here lesen.