Problem mit einer Klasse



  • hallo,

    also ich wollte einfach mal probieren mti einer klasse umzugehen und habe dabei das hier geschrieben

    #include<iostream>
    
    using namespace std;
    
    class meine{
    
    public:
    
    float kapazitaet(float Q,float U)
    {
          float C;
    
        C=Q/U;
    
        return C;
    };
    
    float energie(float C,float U)
    {
        float E;
    
        E=1/(2.0)*C*U*U;
    
        return E;
    };
    
    };
    
    int main()
    {
       meine test;
    
        float Ladung;
    
        float Spannung;
    
        cout<<"Dieses Programm berechnet die Kapazitaet und den Energieinhalt eines Kondensators"<<endl;
    
        cout<<"Bitte geben sie die Ladung und  Spannung ein"<<endl;
    
        cout<<"Ladung: ";
    
        cin>>Ladung;
    
        cout<<"Spannung: ";
    
        cin>>Spannung;
    
        cout<<"Die Kapazitaet des Kondensators betraegt "<<test.kapazitaet(Ladung,Spannung)<<" Farad"<<endl;
    
        cout<<"Der Energieinhalt des Kondensators beträgt "<<test.energie(kapazitaet(Ladung,Spannung),Spannung)<<" Joule"<<endl;
    
        system("Pause");
    }
    

    so leider kommt in der Zeile 54 immer folgener fehler:

    bung.c:54: error: `kapazitaet' undeclared (first use this function)
    bung.c:54: error: (Each undeclared identifier is reported only once for each function it appears in.)
    :: === Build finished: 2 errors, 0 warnings ===

    aber er kennt doch bereits die funktion kapazitaet oder verstehe ich da was falsch., wenn ich es ohne klasse mache, dann läuft das programm einwandfrei, aber mit nicht mehr



  • Hallo

    ja aber du kannst du Methode nicht einfach so hinschreiben.
    Du kannst aber den Wert zwischenspeichern

    float C = test.kapazitaet(Ladung,Spannung)
    float E = test.energie(C,Spannung)
    

    bis bald
    akari



  • aber gucke ma... so funktioniert es doch acuh prima

    #include<iostream>
    
    using namespace std;
    
    float kapazitaet(float Q,float U)
    {
          float C;
    
        C=Q/U;
    
        return C;
    };
    
    float energie(float C,float U)
    {
        float E;
    
        E=1/(2.0)*C*U*U;
    
        return E;
    };
    
    int main()
    {
    
        float Ladung;
    
        float Spannung;
    
        cout<<"Dieses Programm berechnet die Kapazitaet und den Energieinhalt eines Kondensators"<<endl;
    
        cout<<"Bitte geben sie die Ladung und  Spannung ein"<<endl;
    
        cout<<"Ladung: ";
    
        cin>>Ladung;
    
        cout<<"Spannung: ";
    
        cin>>Spannung;
    
        cout<<"Die Kapazitaet des Kondensators betraegt "<<kapazitaet(Ladung,Spannung)<<" Farad"<<endl;
    
        cout<<"Der Energieinhalt des Kondensators beträgt "<<energie(kapazitaet(Ladung,Spannung),Spannung)<<" Joule"<<endl;
    
        system("Pause");
    }
    

    an der stelle hier

    <energie(kapazitaet(Ladung,Spannung),Spannung)<<" Joule"<<endl;
    

    wird doch der wert C auch berechnet durch die ein andere funktion und dann kommt nur noch der andere parameter "Spannung" mit hinten dran...
    wieso geht das nicht auch mit der klasse... die rechnung bleibt ja schließlich gleich.oder sehe ich das falsch.

    udn noch ne frage wo müsste ich deinen lösungsansatz im programm dann örtlich hinschreiben??



  • btw:

    Klassen sollen eigentlich eine menge an dingen, wie z.B.: Massen oder Autos darstellen...
    Eine einfache Rechnung kannst du auch als Funktion verwirklichen... 😉



  • ja das is ja erstma egal. fuktionieren muss es auch so 😉



  • Hallo

    Wenn du es unbedingt doppelt willst, must eben alles doppeln

    cout<<"Der Energieinhalt des Kondensators beträgt "<<test.energie(test.kapazitaet(Ladung,Spannung),Spannung)<<" Joule"<<endl;
    

    bis bald
    akari



  • es geht

    du bist ein schatz akari



  • #if !defined(CONDENSER_H__INCLUDED)
    #define CONDENSER_H__INCLUDED
    
    class condenser 
    {
    public:
        condenser(const float q, const float u) : m_q(q), m_u(u) {}
    
    public:
        float capacity() const { return (m_q / m_u); }
        float energy() const { return (1 / 2.0 * capacity() * m_u * m_u); } 
    
    private:
        float m_q;
        float m_u;
    };
    
    #endif // CONDENSER_H__INCLUDED
    

    ... so macht da auch eine Klasse ein wenig mehr Sinn...

    #include <iostream>
    #include "condenser.h"
    
    int main()
    {
        std::cout << "Kapazitaet/Energieinhalt Kondensator Berechner V0.1" << std::endl;
        std::cout << "Ladung: " << std::flush;
        float charge = 0.0f;
        std::cin >> charge;
        std::cout << "Spannung: " << std::flush;
        float tension = 0.0f;
        std::cin >> tension;
        condenser inst(tension, charge);
        std::cout << "Kapazitaet: " << inst.capacity() << std::endl;
        std::cout << "Energieinhalt: " << inst.energy() << "J" << std::endl;
    }
    

    ...


Anmelden zum Antworten