cadman Geschrieben 9. Dezember 2010 Geschrieben 9. Dezember 2010 hi, ich möchte mir einen eigenen kleine header-file anlegen und per include anweisung einbinden. wie unten dargestellt habe ich eine "fc_math.h" und eine "fc_math.cpp" datei, aber irgendwie klappt es nicht. weiß jemand rat ? fc_math.h -------------------------------------- #ifndef FC_MATH_H #define FC_MATH_H class fc_math { public: fc_bogenm(); fc_grad(); virtual ~fc_math(); protected: private: }; #endif // FC_MATH_H fc_math.cpp ------------------------------------------- #include "fc_math.h" // Umwandlung Grad in Bogenmass double fc_bogenm(double grad) { return (grad / 180.0 * 3.1415927); } // Umwandlung Bogenmass in Grad double fc_grad(double bogenmass) { return (bogenmass / 3.1415927*180.0); }
Klotzkopp Geschrieben 9. Dezember 2010 Geschrieben 9. Dezember 2010 Eine ordentliche Fehlerbeschreibung ist immer hilfreich. Mit "irgendwie klappt es nicht" kann man nichts anfangen. Wenn du deine Methoden außerhalb der Klassendefinition definierst, musst du den Klassennamen dazuschreiben: double fc_math::fc_bogenm(double grad) Und lass den virtuellen Destruktor weg, das ist Unsinn.
cadman Geschrieben 9. Dezember 2010 Autor Geschrieben 9. Dezember 2010 aufruf: fc_math::fc_bogenm(45.0) führt zu folgenden fehlermeldungen: c++ forbids declaration of "fc_bogenm" with no type c++ forbids declaration of "fc_grad" with no type no matching function for cal to "fc_math::fcbogenm(double)"
Klotzkopp Geschrieben 9. Dezember 2010 Geschrieben 9. Dezember 2010 aufruf: fc_math::fc_bogenm(45.0)Dir ist klar, dass du erst eine Instanz dieser Klasse erstellen musst, bevor du die Methode aufrufen kannst? no matching function for cal to "fc_math::fcbogenm(double)"So heißt die Methode ja auch nicht.
cadman Geschrieben 9. Dezember 2010 Autor Geschrieben 9. Dezember 2010 ich dachte ich könnte die selbstdefinierten befehle einfach so nutzen als stünden sie im eigentlichen progi
Klotzkopp Geschrieben 9. Dezember 2010 Geschrieben 9. Dezember 2010 ich dachte ich könnte die selbstdefinierten befehle einfach so nutzen als stünden sie im eigentlichen progiKannst du auch. Zeig doch mal, wie du das aufrufst.
cadman Geschrieben 9. Dezember 2010 Autor Geschrieben 9. Dezember 2010 #include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> #include <K:\Programmieren\c++\Bibliotheken\fc_math\fc_math.h> using namespace std; int main() { cout << "\n" << fc_math::fc_bogenm(45.0); }
carstenj Geschrieben 9. Dezember 2010 Geschrieben 9. Dezember 2010 Hi, fc_bogenm(); du hast eine Funktion, die nichts erwartet, du übergibst aber... fc_bogenm(double); Außerdem musst du erst ein Objekt erstellt, was du nicht tust. Deine Syntax ist falsch. Richtig wäre: ... using namespace std; // Ein Objekt blah vom Typ fc_math erstellen... fc_math blah; int main() { cout << "\n" << blah.fc_bogenm(45.0); }
Klotzkopp Geschrieben 9. Dezember 2010 Geschrieben 9. Dezember 2010 Das würde so funktionieren, wenn fc_bogenm static wäre. Da es das aber nicht ist, musst du zuerst ein Objekt deiner Klasse erzeugen. fc_math x; cout << "\n" << x.fc_bogenm(45.0);[/code]
cadman Geschrieben 10. Dezember 2010 Autor Geschrieben 10. Dezember 2010 und wie mache ich z.b. fc_bogenm static ?
Klotzkopp Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 und wie mache ich z.b. fc_bogenm static ? Indem du in der Klassendefinition static davorschreibst. Beachte auch carstenjs Hinweis: In der Klassendefinition hast du deine Methoden ohne Parameter deklariert, definiert hast du sie aber mit einem double-Parameter. Dass muss einheitlich sein.
carstenj Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 Hi, man sollte auch wissen, was static bedeutet: C++-Programmierung: Statische Elemente in Klassen ? Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher Das nur zu machen weil, weil einem die Syntax besser gefällt oder man sich eine Zeile sparen kann halte ich nicht unbedingt für das beste Kriterium.
cadman Geschrieben 10. Dezember 2010 Autor Geschrieben 10. Dezember 2010 ich glaube, ich muss mir da erst noch ein bißchen anlesen.. ich dachte man könnte die funktionen einfach auslagern, dann im progi dazuladen, um sie dann mit ihrem "normalen" namen zu nutzen
cadman Geschrieben 10. Dezember 2010 Autor Geschrieben 10. Dezember 2010 steht irgendwo schritt für schritt erkälrt, wie ich einen headerfile anzulegen habe ?
Klotzkopp Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 ich dachte man könnte die funktionen einfach auslagern, dann im progi dazuladen, um sie dann mit ihrem "normalen" namen zu nutzenWas meinst du mit "normalem Namen"? War fc_bogenm vorher eine freie Funktion, und du hast sie nur zum "Auslagern" in eine Klasse gesteckt? Wenn du eine Methode einer Klasse aufrufen willst, musst du das wie gezeigt machen. Das hat nichts damit zu tun, ob diese Klasse in einer eigenen Codedatei samt Header liegt. steht irgendwo schritt für schritt erkälrt, wie ich einen headerfile anzulegen habe ?Dein Headerfile ist völlig in Ordnung, wenn man davon absieht, dass die Signaturen der Methoden nicht auf die Definitionen passen. Zeig doch mal, wie dein ganzes Programm ohne "Auslagern" aussehen würde. Vielleicht lässt sich dann nachvollziehen, wo das Verständnisproblem liegt.
cadman Geschrieben 10. Dezember 2010 Autor Geschrieben 10. Dezember 2010 #include <cstdlib> #include <iostream> #include <math.h> #include <stdio.h> #include <K:\Programmieren\c++\Bibliotheken\fc_math\fc_math .h> using namespace std; // Umwandlung Grad in Bogenmass double fc_bogenm(double grad) { return (grad / 180.0 * 3.1415927); } int main() { cout << "\n" << fc_bogenm(45.0); }
Klotzkopp Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 Und warum hast du beim Auslagern diese Funktion in eine Klasse gesteck? Das ist weder notwendig noch besondern sinnvoll.
cadman Geschrieben 10. Dezember 2010 Autor Geschrieben 10. Dezember 2010 also wenn ich ehrlich bin, hat es mein compiler automatisch angelegt
Klotzkopp Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 also wenn ich ehrlich bin, hat es mein compiler automatisch angelegt Ein Compiler legt keine Codedateien an, allenfalls tut das deine Entwicklungsumgebung. Das ist dann aber ein Bedienproblem. fc_math.h sollte so aussehen: #ifndef FC_MATH_H #define FC_MATH_H double fc_bogenm(double grad); #endif // FC_MATH_H[/code] Und fc_math.cpp so: [code]double fc_bogenm(double grad) { return (grad / 180.0 * 3.1415927); }
carstenj Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 Hi, wobei ich mich frage, was du (@cadman) eigentlich genau machen möchtest? Willst du Objektorientierung lernen, oder "einfach" nur deine Aufgabe lösen, mit Auslagerung in einer Headerdatei? Das, was du jetzt hast, funktioniert zwar, hat aber mit Objektorientierung nichts zu tun.
cadman Geschrieben 10. Dezember 2010 Autor Geschrieben 10. Dezember 2010 Erst einmal danke für die Hilfe Ich stecke halt noch ganz am Anfang und teste dieses und jenes. Aber mathematische Funktionen muss man doch nicht in eine Klasse legen, wo liegt der Vorteil ?
carstenj Geschrieben 10. Dezember 2010 Geschrieben 10. Dezember 2010 Hi, Aber mathematische Funktionen muss man doch nicht in eine Klasse legen, wo liegt der Vorteil ? es gibt keinen, ich war mir nur nicht sicher, was du lernen möchtest und wollte dich darauf hinweisen.
cadman Geschrieben 14. Dezember 2010 Autor Geschrieben 14. Dezember 2010 Hallo, ich habe mich genau an den Code von Klotzkopp gehalten und erhalte nun eine Fehler meldung wie im Anhang dargestellt.
Klotzkopp Geschrieben 14. Dezember 2010 Geschrieben 14. Dezember 2010 Der Linker findet keine Definition von fc_bogenm. Du musst fc_math.cpp deinem Projekt/Makefile hinzufügen.
cadman Geschrieben 14. Dezember 2010 Autor Geschrieben 14. Dezember 2010 aber ich habe doch "fc_math.h" mit include eingebunden wie füge ich denn "fc_math.cpp" meinem projekt hinzu "projekt/makefile" was heißt das ?
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden