Funktion aus anderer Quelldatei verwenden



  • Hallo,
    ich lerne momentan C++ mit Qt.
    Ich bekomme es leider nicht hin eine Funktion außerhalb der main-Quelldatei zu programmieren/benutzen. Vielleicht kann mir ja jemand helfen.

    Ich habe insgesamt 3 Dateien: main.cpp, rechne.cpp, rechne.h

    Hier erst einmal der Code:

    main.cpp

    #include <iostream>
    #include "rechne.h"
    
    using namespace std;
    
    int main()
    {
        int zahl1, zahl2;
        cout << "Bitte Zahl 1 eingeben: ";
        cin >> zahl1;
        cout << "Bitte Zahl 2 eingeben: ";
        cin >> zahl2;
        cout << "Das Ergebnis ist " << addiere(zahl1, zahl2);
    
        return 0;
    }
    

    rechne.h

    #ifndef RECHNE_H
    #define RECHNE_H
    
    #endif // RECHNE_H
    class rechne
    {
    public:
        int addiere(int zahl1, int zahl2);
    };
    

    rechne.cpp

    int addiere(int zahl1, int zahl2)
    {
        return zahl1 + zahl2;
    }
    

    Ich bekomme die Fehlermeldung "'addiere' was not declared in this scope".
    Ich habe wahrscheinlich irgendwas vergessen. Aber was, weiß ich nicht

    Es wäre sehr nett wenn mir jemand helfen mag. Danke sehr!



  • Das sieht aber nicht nach Qt aus.
    Aber es ist gut, daß du ersteinmal pures C++ lernst.

    Deine Header-Datei ist falsch:

    #ifndef RECHNE_H
    #define RECHNE_H
    
    int addiere(int zahl1, int zahl2);
    
    #endif // RECHNE_H
    

    Für die Verwendung der Klasse rechne müßte der Aufruf anders aussehen (aber eine Klasse ist hierfür auch nicht nötig).



  • Danke Dir, Th69! Jetzt funktionierts!

    Wie müsste es aussehen wenn ich das mit einer Klasse machen will? Mir würde nur einfallen eine Instanz der Klasse "rechnen" in der main.cpp zu erstellen:

    rechnen *rechnen1 = new rechnen();

    und dann mit rechnen1->addiere(5, 4);

    die Funktion aufzurufen

    Aber das funktioniert nicht
    Danke



  • Was genau funktioniert nicht? Kriegst du einen Compiler- oder Linker-Fehler?

    Kommst du von Java, denn in C++ brauchst du nicht zwingend new:

    rechnen rechnen1;
    
    int summe = rechnen1.addiere(5, 4);
    

    In der zugehörigen Source-Datei mußt du dann bei Klassenfunktionen auch den Klassennamen voranstellen:

    int rechnen::addiere(int zahl1, int zahl2)
    {
      return zahl1 + zahl2;
    }
    


  • Nochmals vielen Dank. Es funktioniert. Ich hatte den Klassennamen:: vergessen!
    Nein, mit Java hatte ich nie was zu tun.

    Bei mir geht nach einiger Zeit bestimmtes Wissen verloren, wenn ich mich mit anderen Theman beschäftige. Ich glaube da hilft nur regelmäßg üben.


Log in to reply