Funktionspointer und Funktionspointer als Parameter


  • Mod

    Nach wie vor ist das eher ein Problem mit deinen Includes. Da du aber in deiner Eingangsfrage die relevanten Zeilen weggelassen hast, und seitdem noch wer weiß welche Änderungen gemacht hast, kann das keiner mehr nachvollziehen.

    Daher bitte: Ein minimales, aber vollständiges Beispiel posten, das den Fehler demonstriert. Siehe auch hier, den Abschnitt unten über Codereduzierung.

    PS: Deine Arrayklasse hat, wie du schon selber vermutest, ein großes Problem mit der Ressourcenverwaltung. Aber das wird dir erst zur Laufzeit um die Ohren fliegen, mit deinem Compilerfehler hat das nichts zu tun. Tipp: Deine Klasse macht zu viel. Es soll ja anscheinend sowohl ein dynamisches Array sein, als auch irgendwie so etwas wie ein mathematischer Vektor. Das sind zwei Funktionalitäten, die getrennt gehören. Ein mathematischer Vektor sollte keine Speicherressourcen verwalten. Und falls es hier nicht um einen Lerneffekt bezüglich Ressourcenverwaltung geht, dann ist es auch überhaupt gar nicht nötig, eine dynamische Arrayklasse selber zu implementieren, denn das gibt es schon fertig, std::vector (was ein Zufall, der Name 🙂 )



  • Danke,

    ich habe den Code in der Eingangsfrage bearbeitet.

    Dann werde ist aus der STL die Vektoren benutzten.

    Ja, wollte zusätzlich als Übung eine eigene Klasse schreiben.

    Vielen Dank!



  • @Herr-Black sagte in Funktionspointer und Funktionspointer als Parameter:

    Danke,
    ich habe den Code in der Eingangsfrage bearbeitet.

    Ich bin jetzt total verwirrt: ist dein Fehler jetzt behoben?

    Mit dem Code oben solltest du jetzt beim Übersetzen den Linker-Fehler bekommen, dass ein "main" fehlt. Ansonsten sollte der Code (unter der Annahme, dass dein MyVector korrekt ist) kompilieren.


  • Mod

    @wob sagte in Funktionspointer und Funktionspointer als Parameter:

    @Herr-Black sagte in Funktionspointer und Funktionspointer als Parameter:

    Danke,
    ich habe den Code in der Eingangsfrage bearbeitet.

    Ich bin jetzt total verwirrt: ist dein Fehler jetzt behoben?

    Ja, nachträglich Beiträge zu editieren verwirrt nur. Außerdem fehlt eine MyArray.h in dem Beitrag. Wenn ich rate, dass deine MyArray.h ungefähr so aussieht, wie deine oben gezeigte Definition der Klasse MyArray, dann funktioniert die Übersetzung: https://ideone.com/BqOdCr Das kann also nicht der Code sein, der bei dir den Fehler verursacht, außer der Fehler ist jetzt doch schon behoben. Da ich aber sowohl raten, als auch den Code editieren musste, ist es durchaus möglich, dass ich mir für die fehlenden Teile etwas richtiges ausgedacht habe, wo du einen Fehler hast.



  • Danke für die Mühe!

    Der Fehler tritt nicht in der Klasse MyArray auf. Dachte nur, weil die Funktion, die ein Objekt dieser Klasse aufruft, Probleme macht.

    //main.h
    #pragma once
    #include <iostream>
    #include "MyArray.h"
    
    
    double f (double x_stelle);
    MyArray gradient (MyArray x_vektor,double(*f_ptr)(double x_stelle));
    

    In der Zeile 8. tritt der Fehler auf:

    Fehler C4430 Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.

    Fehler C2146 Syntaxfehler: Fehlendes ";" vor Bezeichner "gradient".

    Dieser Fehler kommt erst, wenn ich übersetzen möchten. Hier die main.cpp, wo der Rumpf der Funktion definiert wird.

    //main.cpp
    #include "main.h"
    MyArray gradient(MyArray x_vektor, double(*f_ptr)(double x_stelle)) {
    
    	double h = 10 ^ (-8);
    
    	
    	//TODO
    
    	return x_vektor;
    


  • Hast du evtl. einen Syntax-Fehler in "MyArray.h" (z.B. kein abschließendes Semikolon nach der schließenden Klammer der Klasse MyArray)?

    Ansonsten zeige mal die gesamte "MyArray.h".



  • Fehler gefunden, es lag an ein #include "MyArray.h" was sehr weit runtergerutscht ist. Somit ist der gute Präprozessor nicht fertig geworden.
    Vielen Dank für die Hilfe! Sowas blödes...


  • Mod

    @Herr-Black sagte in Funktionspointer und Funktionspointer als Parameter:

    Fehler gefunden, es lag an ein #include "MyArray.h" was sehr weit runtergerutscht ist. Somit ist der gute Präprozessor nicht fertig geworden.
    Vielen Dank für die Hilfe! Sowas blödes...

    Und genau darum haben wir nach einem vollständigem Minimalbeispiel gefragt. Das hätten wir sofort gesehen.



  • @Herr-Black sagte in Funktionspointer und Funktionspointer als Parameter:

    double h = 10 ^ (-8);

    Das macht übrigens nicht was du denkst. '^' bedeutet xor und nicht Potenz.



  • @Jockelx ja:D habe ich schon gemerkt :-), 10e-8 ist der richtig Ausdruck 🙂


Anmelden zum Antworten