Prob mit Klasse Trigometrie ...



  • Wenn Du eine Konstanten innerhalb einer Klasse mit einen Wert initialisieren willst, so musst Du das in der Initialisierungsliste des Constructors machen.



  • Hi!

    vielen Dank für die Antworten ... hab gestern ganz schön viel gefeiert bzw getrunken usw ... deswegen diese Fehler 😉

    danke soweit!

    @Asgard:

    Könntest du mir vielleicht ma ein kleines Beispiel geben wie sowas
    ausschauen sollte ?

    THX an alle!
    ciao



  • #define _CFunction_
    

    ist illegal. (underscore am anfang)
    using namespace ist in headern außerdem tabu.

    class Foo {
        const long double  PI = 3.1415926535897932384626433832795;
    };
    

    lieber so

    class Foo {
       static const long double PI;
    }
    
    //irgendwas.cpp
    const long double Foo::PI = 3.1415926535897932384626433832795;
    

    aber was viel fraglicher ist, ist das kapseln von sin, cos und tan in einer klasse. und was saveSing tut, ist nicht das, was sein name sagt. (eingabe vom user etc)



  • Verdammt ich weiß auch nicht .... ich bekomme immer noch 11 Fehler vom Compiler. Ich kann irgenwie nichts damit anfangen 😕

    Hab das jetzt alles soweit geändert:

    //#################################
    // CFunction.h
    // Erstellungs Datum: 25.04.2004
    // Autor: DaRkWolF
    //#################################
    
    #ifndef _CFunction_
    #define _CFunction_
    
    #include <cmath>
    using namespace std;
    
    Header:
    
    // ####################   KLASSE/TRIGOMETRIE ############################
    
    class Trigonometrie {              //  Klasse für Cosinus, Sinus, Tangens
    
    private:
    
    	int     Grad, x;
    	double  Bogenmass, cosinus, tangens;            // Membervariablen
    
        const long double  PI;
    
    public:
    
         Trigonometrie();                        
         ~Trigonometrie();  
    
    	void     saveData(int );       // Memberfunktionen
    	double   readSing();
    
    	void     saveData(int );
    	double   readCos();
    
    	void    saveData(int );
    	double  readTang();
    
    };
    
    void Trigonometrie::saveData(){
    
    	cout << "\nBerechnung von Sinus:";
    	cout << "\nBitte geben sie den Winkel in Grad ein:"<< endl;
    	cin  >> Grad; 
        Bogenmass = (PI * Grad) / 180; 
        x = sin( Bogenmass );
    
        cout << "\n" << endl;
    
    }
    
    double Trigonometrie::readSing(){
    
    	cout << "Bogenmass: " << Bogenmass/PI << "* PI" << endl; 
        cout << "Sinus:     " << x                      << endl;
    
    	cout << "\n";
    
    }
    
    void Trigonometrie::saveData(){
    
       cout << "\nCosinus-Berechnung:" << endl;
       cout << "\nBitte geben sie den Winkel in Grad ein:" << endl;
       cin  >> Grad;
    
       Bogenmass = (PI * grad) / 180;
    
       x = cos( Bogenmass );
    
       cosinus = cos(grad);
    
    	cout << "\n" << endl;
    
    }
    
    double Trigonometrie::readCos(){
    
        cout << "Bogenmass: " << Bogenmass/PI << "* PI" << endl; 
        cout << "Cosinus:   " << cosinus                << endl;
    
    	cout << "\n";
    
    }
    
    void Trigonometrie::saveData(){
    
    			  cout << "\nTangens-Berechnung:" << endl;
    
    			  cout << "\nBitte geben sie den Winkel ein:" << endl;
    
    			  cin  >> Grad;
                  bogenmass = (PI * grad) / 180; 
                  x = tan( Bogenmass );
    
    			  tangens = tan(Grad);
    
    			  cout << "\n" << endl;
    
    }
    
    double Trigonometrie::readTang(){
    
    	cout << "Bogenmass: " << Bogenmass/PI << "* PI" << endl; 
    	cout << "Tangens:   " << tangens                << endl;
    
        cout << "\n";
    
    #endif
    
    }
    

    cpp Datei:

    // test Klasse/Trigometrie
    // bspTrigp.cpp
    
    #include <iostream>
    using namespace std;
    #include "CFunction.h"
    
    Trigonometrie::Trigonometrie(){                // Konstruktor
    
    }
    
    Trigonometrie::~Trigonometrie(){              // Destruktor
    
    }
    
    int main(){
    
    	 Trigonometrie Trigo;         // Instanz "Trigo" der Funktion Trigometrie
    
    	 Trigo.saveSing();
    	 Trigo.saveCos();
    	 Trigo.saveTang();
    	 cout <<"\nWert in Sinus      :" << Trigo.readSing() << endl;
    	 cout <<"\nWert in Cosinus    :" << Trigo.readCos()  << endl;
    	 cout <<"\nWert in Tangens    :" << Trigo.readTang() << endl;
    
    	return 0;
    
    }
    

    Währ echt nett von euch wenn mir einer noch einen kleinen Tip gibt 😉
    komme echt nicht drauf 😑

    THX



  • du benutzt überall PI hast es aber nicht definiert! 😕



  • Online schrieb:

    du benutzt überall PI hast es aber nicht definiert! 😕

    Nö, er hat es niht initialisiert!



  • MaSTaH schrieb:

    Online schrieb:

    du benutzt überall PI hast es aber nicht definiert! 😕

    Nö, er hat es niht initialisiert!

    Wo hat er PI denn definiert?



  • Trigonometrie::Trigonometrie(){                // Konstruktor 
    //bitte hier wert von PI eintragen, danke
    
    }
    


  • Shade Of Mine schrieb:

    Wo hat er PI denn definiert?

    sorry. Mein fehler. ich habe gedacht er hat es richtig gemacht und static verwendet...



  • otze schrieb:

    Trigonometrie::Trigonometrie(){                // Konstruktor 
    //bitte hier wert von PI eintragen, danke
    
    }
    

    Das funktioniert bei mir nicht...

    Trigonometrie::Trigonometrie(){                // Konstruktor 
    3.1415926535897932384626433832795
    
    }
    


  • also bei mir gehts immer noch nicht ...
    hab alles so geändert wie ihr es mir gesagt habt.
    9 Fehler kommen noch vom Compiler:

    **
    --------------------Configuration: FunktionsBibliothek - Win32 Debug--------------------
    Compiling...
    bspTrigo.cpp
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(44) : error C2535: 'void __thiscall Trigonometrie::saveData(double)' : member function already defined or declared
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(41) : see declaration of 'saveData'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(47) : error C2535: 'void __thiscall Trigonometrie::saveData(double)' : member function already defined or declared
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(41) : see declaration of 'saveData'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(53) : error C2511: 'saveData' : overloaded member function 'void (void)' not found in 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(26) : see declaration of 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(74) : error C2065: 'PI' : undeclared identifier
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(84) : error C2511: 'saveData' : overloaded member function 'void (void)' not found in 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(26) : see declaration of 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(117) : error C2511: 'saveData' : overloaded member function 'void (void)' not found in 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(26) : see declaration of 'Trigonometrie'
    I:\Dokumente und Einstellungen\Leon Seichab\Desktop\MyProjects\Funktions&KlassenLibary\bspTrigo.cpp(34) : error C2039: 'saveSing' : is not a member of 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(26) : see declaration of 'Trigonometrie'
    I:\Dokumente und Einstellungen\Leon Seichab\Desktop\MyProjects\Funktions&KlassenLibary\bspTrigo.cpp(35) : error C2039: 'saveCos' : is not a member of 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(26) : see declaration of 'Trigonometrie'
    I:\Dokumente und Einstellungen\Leon Seichab\Desktop\MyProjects\Funktions&KlassenLibary\bspTrigo.cpp(36) : error C2039: 'saveTang' : is not a member of 'Trigonometrie'
    i:\dokumente und einstellungen\leon seichab\desktop\myprojects\funktions&klassenlibary\cfunction.h(26) : see declaration of 'Trigonometrie'
    Error executing cl.exe.

    bspTrigo.obj - 9 error(s), 0 warning(s)
    **

    woran liegt das blos !!??

    THX für alle antworten



  • Aua aua, ganz am Ende...

    #endif
    
    }
    


  • //cfunction.h
    #ifndef CFunction
    #define CFunction
    
    class Trigonometrie {
    private:
        int Grad, x;
        double Bogenmass, cosinus, tangens;
    
    public:
        static const long double PI;
    
        double saveSing(int); //Achtung, macht nicht, was der Name zu vermuten lässt
        void readSing();
        double saveCos(int);
        void readCos();
        double saveTang(int);
        void readTang();
    };
    
    #endif
    
    //trigo.cpp
    #include "cfunction.h"
    #include <cmath>
    using namespace std;
    
    const long double Trigonometrie::PI = 3.1415926535897932384626433832795;
    double;
    Trigonometrie::saveSing(){
        cout << "\nBerechnung von Sinus:\n"
                "Bitte geben sie den Winkel in Grad ein:\n";
        cin  >> Grad;
        Bogenmass = (PI * Grad) / 180;
        x = sin(Bogenmass);
        cout << "\n\n";
        return x;
    }
    
    void
    Trigometrie::readSing(){
        cout << "Bogenmass: " << Bogenmass/PI << "* PI\n"
                "Sinus:     " << x << "\n\n";
    }
    
    double
    Trigometrie::saveCos(){
       cout << "\nCosinus-Berechnung:\n"
               "\nBitte geben sie den Winkel in Grad ein:\n";
       cin  >> Grad;
       Bogenmass = (PI * grad) / 180;
       x = cos(Bogenmass);
       cosinus = cos(grad);
       cout << "\n\n";
       return x;
    }
    
    void
    Trigometrie::readCos(){
        cout << "Bogenmass: " << Bogenmass/PI << "* PI\n"
                "Cosinus:   " << cosinus << "\n\n";
    }
    
    double
    Trigometrie::saveTang(){
        cout << "\nTangens-Berechnung:\n"
                "Bitte geben sie den Winkel ein:\n";
        cin  >> Grad;
        bogenmass = (PI * grad) / 180;
        x = tan(Bogenmass);
        tangens = tan(Grad);
        cout << "\n\n";
        return x;
    } 
    
    void
    Trigometrie::readTang(){
        cout << "Bogenmass: " << Bogenmass/PI << "* PI\n"
                "Tangens:   " << tangens << "\n\n";
    }
    

    Du hast einen seltsamen hang zu leerzeichen/-zeilen...
    Nimm entweder dein LieblingsC++buch zur hand und lies es nochmal oder hör auf während des Programmierens alzu exzessiv zu feiern bzw. zu trinken 😉
    das zurückgeben von werten hast du auch vergessen.



  • und wenn du in einer klasse einen prototyp double saveSing(int); hast, muss es auch später heissen:

    double Trigometrie::saveSing(int Grad){
        Bogenmass = (PI * Grad) / 180; 
        x = sin(Bogenmass); 
        return x;//du hast einen rückgabewert im prototyp definiert, dann musst du ihn auch zurückgeben
    }
    

    in einer berechnungsfunktion hat kein cin/cout verloren, und erstrecht nicht, wenn der prototyp einen parameter/rückgabewert hat.

    fang nochmal ganz von vorne an, die fehler rühren nicht vom alkohol sondern von einfachen unkenntnissen, aber daran kann man was ändern 😃



  • otze schrieb:

    Trigonometrie::Trigonometrie(){                // Konstruktor 
    3.1415926535897932384626433832795
    
    }
    

    lies bitte bitte nochmal ein buch über c++, das tut ja weh.

    Trigonometrie::Trigonometrie(){                // Konstruktor 
    PI=3.1415926535897932384626433832795
    
    }
    

    wie kannst du PI etwas zuweisen, wo es doch const ist?

    lies bitte bitte nochmal ein buch über c++, das tut ja weh.

    MaSTaH wollte dezent auf eine unklarheit und unkorrektheit deiner erklärung eingehen.



  • schon klar, hab mich bei meiner erklärung auf ne aussage gestützt, die hier im forum mal getätigt wurde, da ich selber kein so großer vertreter des const prinzips bin, hab ichs auch selber auch nie nachgeprüft. naja is geedited^^

    btw, wo sollte man einen const wert initialisieren wenn nicht im ctor?^^



  • otze schrieb:

    da ich selber kein so großer vertreter des const prinzips bin

    au, das tut weh. auch noch nie referenzen als member benutzt? oder basisklassen initialisiert?

    btw, wo sollte man einen const wert initialisieren wenn nicht im ctor?^^

    also:

    class Foo : public Bar {
      const int x_;
      int &y_;
    public:
      Foo (int &y) : Bar(42), x_(21), y_(y) {}
    };
    

    die elementinitialisierungsliste des ctors.



  • otze schrieb:

    btw, wo sollte man einen const wert initialisieren wenn nicht im ctor?^^

    Natürlich im ctor. Allerdings in der Initialisierungsliste. Das sollte man btw. bei allen Sachen machen, da man sich eine unnötige Vorinitialisierung spart. Das sollte dir als Performance-Fan doch bekannt sein 🙄 .

    Klasse::Klasse()
    : val1(10), val2(100) // <- das hier ist eine Initialisierungsliste
    {
    }
    

    EDIT: zu spät



  • otze schrieb:

    da ich selber kein so großer vertreter des const prinzips bin

    Wuerde ich schleunigst aendern.

    btw, wo sollte man einen const wert initialisieren wenn nicht im ctor?^^

    initialisierungsliste?



  • was ist eigentlich so "toll" am const prinzip?


Anmelden zum Antworten