Funktion in main nutzen?



  • Hey, ich habe eine Funktion deklariert in:

    funktion.h:

    #ifndef FUNKTION_H
    #define FUNKTION_H
    
    #include <iostream>
    
    class Funktion
    {
    public:
    void help();
    }
    

    funktion.cpp:

    using namespace std;
    #include "alsa.h"
    
    void Funktion::help()
    {
    cout << "Hier gibt es Hilfe" << endl;
    }
    

    main.cpp:

    using namespace std;
    #include "Funktion.h"
    
    int main(int argc, char **argv)
    {
    if (argc == 1)
    {
    Funktion::help(); //Und hier wird mir der Fehler angezeigt: "Invalid arguments 'Candidates are: void help()'
    }
    }
    

    Meinen Fehler hab ich schon reingeschrieben, kann mir einer helfen?
    Danke im vorraus, MeyerSchmidt



  • ups was vergessen, funktion.h:

    #ifndef FUNKTION_H
    #define FUNKTION_H
    
    #include <iostream>
    
    class Funktion
    {
    public:
    void help();
    }
    #endif
    

    So jetzt ist alles drin.



  • Die Methode ist nicht static. um sie aufzurufen, benötigst du eine Instanz.



  • Also wenn ich die Methode als static int macht würde es reichen oder?



  • Ach ich schreib Müll..
    ich meinte static void help(); in meiner funktion.h ?



  • Das würde dann so gehen. Ich frage mich nur, ob du das auch wirklich willst, oder ob nicht eine freie Funktion ausreichend wäre.

    Inb jedem Fall willst du ein gutes Grundlagenbuch lesen...



  • oder du machst es gleich als freie funktion.



  • MeyerSchmidt schrieb:

    Hey, ich habe eine Funktion deklariert in:

    funktion.h:

    #ifndef FUNKTION_H
    #define FUNKTION_H
    
    #include <iostream>
    
    class Funktion
    {
    public:
    void help();
    }
    

    Du hast eine Klasse deklariert. Wenn Du eine Klasse Funktion nennst, ist es dennoch keine Funktion.

    Tip: lern mal C++.



  • MeyerSchmidt schrieb:

    using namespace std;
    #include "Funktion.h"
    
    int main(int argc, char **argv)
    {
    if (argc == 1)
    {
    Funktion::help(); //Und hier wird mir der Fehler angezeigt: "Invalid arguments 'Candidates are: void help()'
    }
    }
    

    Das ist nicht der Aufruf, den der Kompiler bekommen hast. Funktion::help(?)
    In ? hast du irgendetwas rein geschrieben. Der Kompiler merkt an, dass du eine Help-Funktion ohne Parameter hast.



  • Als freie Funktion will ich es auch nicht machen, weil eig wollte ich eher noch das man in der Hilfe-Funktion bevor der Text ausgegeben wird noch eine andere Funktion aufgerufen wird und erst überprüft was falsch ist, und wenn die help-funktion static wäre würde das ja nicht gehen.



  • @ich bins: Tut mir leid, bin uneinfallsreich gewesen, hätte die Klasse auch Baum nennen können.



  • MeyerSchmidt schrieb:

    Als freie Funktion will ich es auch nicht machen, weil eig wollte ich eher noch das man in der Hilfe-Funktion bevor der Text ausgegeben wird noch eine andere Funktion aufgerufen wird und erst überprüft was falsch ist, und wenn die help-funktion static wäre würde das ja nicht gehen.

    du sprichst in Rätseln.

    void function()
    { 
      // do something
    };
    
    void anotherFunction()
    {
      function();
    
      // do some other things
    }
    

    geht alles als freie Funktion.

    BTW: static Methoden können andere Methoden aufrufen, die ebenfalls static sind.

    Gib doch mal mehr Hintergrund, dann können wir dir bei deinem Design helfen.



  • Problem ist gelöst indem ich alle Funktion einfach static gemacht hab.
    Aber hätte gern noch ein Problem, und zwar geht es um dieselbe Materie.
    Ich hätte gern, dass wenn ich auf die help-Funktion zugreif über meine main, dass in der help ebenfalls eine Funktion aufgerufen wird welche in ein Logfile schreibt.
    Also habe ich weiterhin meine funktion.h, funktion.cpp und meine main.cpp und jetz habe ich weiterhin:

    logfile.h:

    #ifndef LOGFILE_H
    #define LOGFILE_H
    
    #include <iostream>
    
    class Logfile
    {
    public:
    void writetolog();
    }
    #endif
    

    logfile.cpp:

    using namespace std;
    #include "Logfile.h"
    
    void writetolog()
    {
    (...) // Hier soll es ein FILE per fopen öffnen, und dann einfach hineinschreiben
    }
    

    logfile.cpp:

    using namespace std;
    #include "Funktion.h"
    #include "Logfile.h"
    
    void help()
    {
    Logfile::writetolog();
    cout << "Hilfe bekommst du hier" << endl;
    }
    

    Dabei zeigt es mir vom Kompiler an "Elementfunktion >>Logfile::writetolog()<< kann nicht ohne Objekt aufgerufen werden"



  • Schreibfehler, der dritte Quellcode soll die neue Funktion.cpp sein!



  • ich bins schrieb:

    .

    Tip: lern mal C++.

    Du verstehst nicht was Funktionen, Memberfunktionen(Methoden), Klassen, Objekte, ... sind. Ohne dieses Verständnis kommst du nicht weit und verstehst nicht mal die Fehlermeldungen des Compilers.



  • Habe die Lösung noch gefunden letzte Woche.
    In meiner main.cpp einfach:

    [code="cpp"]using namespace std;
    #include "Funktion.h"

    Funktion h;

    int main(int argc, char **argv)
    {
    if (argc == 1)
    {
    h.help(); //So klappt es und zeigt mir alles aus der Funktion help() an 😉
    }
    }



  • Habe die Lösung noch gefunden letzte Woche.
    In meiner main.cpp einfach:

    using namespace std;
    #include "Funktion.h"
    
    Funktion h;
    
    int main(int argc, char **argv)
    {
    if (argc == 1)
    {
    h.help(); //So klappt es und zeigt mir alles aus der Funktion help() an ;)
    }
    }
    

    Code gut sichtbar gemacht nochmal 😃


  • Mod

    Und warum braucht man ein globales Funktionsobjekt, bloß um eine ganz normale Funktion aufrufen zu können?

    Daher:

    MichelRT schrieb:

    ich bins schrieb:

    .

    Tip: lern mal C++.

    Du verstehst nicht was Funktionen, Memberfunktionen(Methoden), Klassen, Objekte, ... sind. Ohne dieses Verständnis kommst du nicht weit und verstehst nicht mal die Fehlermeldungen des Compilers.

    +1


Log in to reply