Mischen von c und c++ ?



  • Hi,
    ich habe erst vor kurzm angefangen zu programmieren, da ich eine selbst gebaute Relaiskarte mit dem Parallelport ansteuern will.

    Da ich Linux einsetzte nutze ich die Library parapin.h von sourceforge.
    Meine ersten programme habe ich in c geschrieben und diese haben auch problemlos funktioniert. Jetzt habe ich das ganze um SimpleIni.h erweitert um ini Files zu Parsen welches eigenständug auch funktioniert. SimpleIni.h verwendet C++.

    Wenn ich das ganze zusammen führe bekomme ich beim Kompilieren

    /usr/local/include/parapin.h|39|error: expected ‘;’ before ‘extern’

    Ich habe mir die header angesehen und dort ist extra dies eingetragen.

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    . . . 
    . . . 
    
    #ifdef __cplusplus
     }
     #endif
    

    Also wenn er C++ erkennt dann sollte er das ganze in Klammer setzten, aber warum er mir dann den Fehler bringt verstehe ich leider nicht.

    Ich hoffe ihr könnt mir ein wenig auf die Sprünge helfen.

    mfg Link



  • Zeig mal die Datei, in der du parapin.h includest. Da sitz wahrscheinlich der Fehler vor dem include von parapin.h.



  • #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <errno.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <iostream>
    using namespace std
    #include "parapin.h"        
    #include "SimpleIni.h"
    

    So waren meine include's, anhand deines posts hab ich nochmal nachgesehen was dazu kam z.B. using namespace std . und habe es mal an den schluss gesetzt, und so kompiliert er dann 😉

    Ich bedanke mich mal, ich wäre nicht darauf gekommen das es an der Reihenfolge liegt. Manchmal reicht auch ein wink um ein Problem zu Lösen.

    vielen Dank, Link



  • Es liegt nicht an der Reihenfolge, sondern am fehlenden Semikolon nach using namespace std;
    Ich möchte mal hinzufügen, dass das aus der Fehlermeldung her eigentlich klar war ... 😉 Trotzdem ist es eine gute Idee, diese using-Direktive nach die ganzen #includes zu setzen (und mit Semikolon), da sonst in diesen Headern der ganze std-Namensraum geöffnet ist.


Anmelden zum Antworten