Hallo zusammen,
Ich habe folgendes Problem:
Ich möchte eine in C geschriebene Funktion in einer main.cpp aufrufen, kriege
aber immer wieder unterschiedliche Fehlermeldung, obwohl ich den Compiler explizit mit extern "C" anweise diese Funktion doch bitte mit dem C-Compiler zu kompileren und den Rest, welcher C++ spezifisch ist, mit dem C++ Compiler zu kompilieren.
Vielleicht weiß jemand von euch Rat.
Probiere euch das ganze an Hand eines Beispiels besser zu illustrieren:
Die Datei kontakt.c enthält nur eine printf Ausgabe der in konakt.h
definierten Struktur kontakt:
Die Datei kontakt.cpp enthält wiederum eine Ausgabefunktion für eine zweite in kontakt.h definierte Struktur skontakt, diese Struktur enthält selber eine Ausgabefunktion:
Der Header zu der ganzen Geschichte sieht so aus:
Und als letztes die main.cpp in der ich die structs initialisiere und den Compiler
explizit anweise die Funktion void printc(); mit dem C Compiler zu kompilieren.
Habe auch schon probiert das extern "C" in den Header einzubauen, weiß aber nicht ganz wie ich es schachteln muss.
Fehlermeldung lautet wie folgt:
1>main.cpp(5) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'printc'
1> Siehe Deklaration von 'printc'
Bei Zahlreichen anderen Versuchen bekam ich oftmals die Fehlermeldung über Fehlende externe Verweise auf entweder printc oder printcpp, weil meiner Vermutung nach die extern "C" Anweisung nicht richtig von mir umgesetzt wurde.
Also ums nochmal zusammenzufassen sollten beide structs in einer Header definiert sein + die printc() Methode. Implementiert sollen die Funktionen in der main.cpp und auch als C++ kompiliert werden, halt mit der Einschränkung, dass auch die in C geschrieben printc() Funktion kompiliert wird.
So hoffe das ist einigermaßen verständlich und jemand weiß Rat!
lg Static
Ich habe folgendes Problem:
Ich möchte eine in C geschriebene Funktion in einer main.cpp aufrufen, kriege
aber immer wieder unterschiedliche Fehlermeldung, obwohl ich den Compiler explizit mit extern "C" anweise diese Funktion doch bitte mit dem C-Compiler zu kompileren und den Rest, welcher C++ spezifisch ist, mit dem C++ Compiler zu kompilieren.
Vielleicht weiß jemand von euch Rat.
Probiere euch das ganze an Hand eines Beispiels besser zu illustrieren:
Die Datei kontakt.c enthält nur eine printf Ausgabe der in konakt.h
definierten Struktur kontakt:
Code:
#include <stdio.h> #include <stdlib.h> #include "kontakt.h" void printc(kontakt *ptr){ printf(" Vorname:%s \n Nachname:%s \n Identifikationsnummer:%d \n TelefonNr.:%d \n",ptr->vorname,ptr->name,ptr->id,ptr->tel); }
Code:
#include <iostream> #include "kontakt.h" void skontakt::printcpp(){ //Erstmal zu Testzwecken nur den Vornamen std::cout<<"Vorname: "<<this->vorname<<"\n"; }
Code:
#ifndef _KONTAKT_H #define _KONTAKT_H typedef struct kontakt{ char *vorname; char *name; int id; int tel; }kontakt; void printc(kontakt *ptr); typedef struct skontakt{ char *vorname; char *name; int id; int tel; void printcpp(); }skontakt; #endif
explizit anweise die Funktion void printc(); mit dem C Compiler zu kompilieren.
Habe auch schon probiert das extern "C" in den Header einzubauen, weiß aber nicht ganz wie ich es schachteln muss.
Code:
#include <iostream> #include "kontakt.h" extern "C" void printc(kontakt *ptr); int main( int argc, char* argv[] ){ kontakt *c; c->vorname = "Peter"; c->name = "Lustig"; c->id = 9000; c->tel = 190666666; printc(c); skontakt *c2; c2->vorname = "Peter"; c2->name = "Lustig"; c2->id = 9000; c2->tel = 190666666; c2->printcpp(); }
1>main.cpp(5) : error C2732: Bindungsangaben widersprechen vorheriger Angabe für 'printc'
1> Siehe Deklaration von 'printc'
Bei Zahlreichen anderen Versuchen bekam ich oftmals die Fehlermeldung über Fehlende externe Verweise auf entweder printc oder printcpp, weil meiner Vermutung nach die extern "C" Anweisung nicht richtig von mir umgesetzt wurde.
Also ums nochmal zusammenzufassen sollten beide structs in einer Header definiert sein + die printc() Methode. Implementiert sollen die Funktionen in der main.cpp und auch als C++ kompiliert werden, halt mit der Einschränkung, dass auch die in C geschrieben printc() Funktion kompiliert wird.
So hoffe das ist einigermaßen verständlich und jemand weiß Rat!
lg Static
Comment