C++ und c vermengen



  • danke,

    also ich bin jetzt bei der Fehlermeldung undefined reference to beispielfunktion()

    hab ich da was beim linken falsch gemacht und fehlt beim code was?


  • Mod

    Somersault schrieb:

    danke,

    also ich bin jetzt bei der Fehlermeldung undefined reference to beispielfunktion()

    hab ich da was beim linken falsch gemacht und fehlt beim code was?

    woher sollen wir das wissen?



  • mein Cpp Programm:

    #include "mein_cpp.h"
    #include <iostream>
    using namespace std;
    
    void Mein_CPP::request(req_hdr *hdr) {
    
    	 cout << "Methode: request" << endl;
    	 get_answer(hdr); // hier bekomme ich den besagten Fehler	 
    }
    

    .h dazu

    #ifndef MEIN_CPP_H
    #define MEIN_CPP_H
    #include <string>
    
    #include "nur_c.h"
    
    class Mein_CPP {
    
    public:
    
        void request (req_hdr *hdr);
    
    protected:
    
    private:
    
    };
    #endif //MEIN_CPP_H
    

    die nur_c.h file zur c Funktion:

    #ifdef __cplusplus
    extern "C" {
    #endif
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    #include <unistd.h>
    
    #include "constants.h"
    
    // keine Ahnung für was das gut, der code ist nicht von mir...
    #define bla_bla 300
    
    #define bla_blub 250
    
    // diese funktion will ich
    extern void get_answer ( req_hdr  * );
    
    #ifdef __cplusplus
    }
    #endif
    


  • Sieht alles richtig aus. Das C-Programm ist auch wirklich mit einem C-Compiler übersetzt?



  • LordJaxom_lg schrieb:

    Blue-Tiger schrieb:

    Du brauchst nichts besonderes tun. In deiner C++ - Datei einfach die C-Header-Datei inkludieren und beim Linken die Implementationsdatei (.c) mitlinken. Ganz genau so, als waeren es C++ Dateien. Schliesslich ist C eine Untermenge von C++ *, alles was gueltiges C ist, ist also auch gueltiges C++ *.

    Das stimmt leider überhaupt nicht. Wenn das C-Programm mit einem C-Compiler übersetzt wurde, muss das C++-Programm durch extern "C" mitgeteilt bekommen, dass die Funktion nicht name-mangled wurde.

    Er hat aber gesagt er haette die .c-Datei ebenfalls. Und dann kann man einfach beide mit dem C++ Compiler kompilieren.



  • das mit dem linken und compilieren ist in c/c++ ja nicht ganz so trivial, wie bei anderen Programmiersprachen..

    aber ich weiß das ich gcc habe und ein makefile, dass mir ebenfalls vorgegeben worden ist.

    ob diese Aussagen jetzt hilfreich sind, weiß ich leider nicht 😕



  • Blue-Tiger schrieb:

    Er hat aber gesagt er haette die .c-Datei ebenfalls. Und dann kann man einfach beide mit dem C++ Compiler kompilieren.

    Mitnichten kann man das, auch nicht bei reinem C89. Mit etwas Glück, ja, aber längst nicht immer.

    @Somersault:
    Schau, ob das C-File mit gcc und das C++-File mit g++ übersetzt werden.



  • unter discovery options bei eclipse steht "gcc c compiler und gcc c++ compiler". Das ist das projekt aus der ich die .h file ziehen möchte.

    mein cpp projekt wird mit den selben compilern kompeliert, unter settings steht hier noch g++ und weitere pfade (include path's)



  • Somersault schrieb:

    unter discovery options bei eclipse steht "gcc c compiler und gcc c++ compiler".

    Aha. Und?

    Das ist das projekt aus der ich die .h file ziehen möchte.

    Aha.

    *seufz*

    Okay, probier es bitte mal auf der Kommandozeile:

    gcc -o cprog.o cprog.c
    g++ -o cppprog.o cppprog.cpp
    g++ -o prog cprog.o cppprog.o
    


  • es war ein Linker Fehler 🙄
    omg, als noob hat man es nicht einfach.. aber das passiert mir nicht nochmal^^

    Danke für die Hilfe!!


Anmelden zum Antworten