Startprobleme in C++ (OOP)



  • 😃
    Uuuups, war "mich" gar nicht aufgefallen, naja das "komt" davon "wen" man ständig Strg-C und Strg-V verwendet... grins

    😃
    Aber die anderen Probleme sind nicht vom Pisa- Problem befallen oder???



  • Noch ein paar Fragen:

    1. Was versteht man unter Referenzen??

    Die Aufgabenstellung war folgendermaßen:

    Eine Klasse "elektrische Bauteile" schreiben
    Klasse soll folgende Attribute haben:
    Verlustleistung bei 0 Grad, V-Leistung bei 40 Grad und die Temperatur
    Für jedes Attribut soll es Set und Get- Methode geben

    Hier mein Bisheriger Code:

    #include <iostream.h>
    
    class elMaschinen
    
    {
    private:
    	float VLeistN, VLeistV,Temperatur;
    
    public:
    	elMaschinen(float VerlLeistungNullGr=0, float VerlLeistungVierzGr=0, Temp=0)
    	{
    		VLeistN= VerlLeistungNullGr;
    		VLeistV= VerlLeistungVierzGr;
    		Temperatur=Temp;
    	}
    
    	void setVLeistN(float VerlLeistungNullGr){VLeistN=VerlLeistungNullGr;}
    	double getVLeistN(void){return VLeistN;}
    
    	void setVLeistV(float VerlLeistungVierzGr){VLeistV= VerlLeistungVierzGr;}
    	double getVLeistV(void){return VLeistV;}
    
    	void setTemperatur(float Temp){Temperatur=Temp;}
    	double getTemperatur(void){return Temperatur;}
    };
    

    2.1.

    elMaschienen(float VerlLeistungNullGr=0, float VerlLeistungVierzGr=0, Temp=0)
    {
    VLeistN= VerlLeiitungNullGr;
    VLeistV= VerlLeistungVierzGr;
    Temperatur=Temp;
    } //Die Definition würde ich in einer .cpp Datei machen

    zu //Die Definition würde ich in einer .cpp Datei machen
    elMaschinen muss aber trotzdem noch in der header vorkommen oder??
    Etwa so:
    elMaschienen(float VerlLeistungNullGr=0, float VerlLeistungVierzGr=0, Temp=0){}
    oder muss das nicht sein??

    2.2.

    elMaschienen(float VerlLeistungNullGr=0, float VerlLeistungVierzGr=0, Temp=0)
    {
    VLeistN= VerlLeiitungNullGr;
    VLeistV= VerlLeistungVierzGr;
    Temperatur=Temp;
    } // Initialisierungsliste verwenden!

    Was ist eine Initialisierungsliste und wie verwende ich die??

    Gruß cppNeuling



  • Deine Klasse ist erstmal im Prinzip soweit richtig. In den Header würde ich nur die Schnittstellenbeschreibung rein tun, wofür Headerdateien eigentlich auch nur gedacht sind:

    // Datei: elMaschinen.h
    #pragma once
    
    #ifndef ELMASCHINEN_H
    #define ELMASCHINEN_H
    
    class elMaschinen
    {
    private:
        float VLeistN, VLeistV,Temperatur;
    
    public:
        elMaschinen(float VerlLeistungNullGr=0, float VerlLeistungVierzGr=0, Temp=0);
    
        void setVLeistN(float VerlLeistungNullGr);
        double getVLeistN(void);
    
        void setVLeistV(float VerlLeistungVierzGr);
        double getVLeistV(void);
    
        void setTemperatur(float Temp);
        double getTemperatur(void);
    };
    
    #endif // ELMASCHINEN_H
    

    Warum includierst du eigentlich immer iostream? Aus iostream benutzt du in der Klasse garnichts.

    Die eigentliche Implementierung gehört in die cpp-Datei (cpp ist auch DIE Implementierungs- bzw. Übersetzungsdatei!):

    // Datei: elMaschinen.cpp
    
    #include "elMaschinen.h"
    
    elMaschinen::elMaschinen(float VerlLeistungNullGr, float VerlLeistungVierzGr, Temp)
    {
      VLeistN= VerlLeistungNullGr;
      VLeistV= VerlLeistungVierzGr;
      Temperatur=Temp;
    }
    
    void elMaschinen::setVLeistN(float VerlLeistungNullGr)
    {
      VLeistN=VerlLeistungNullGr;
    }
    
    double elMaschinen::getVLeistN(void)
    {
      return VLeistN;
    }
    
    // usw.
    


  • Danke für diese ausführliche Antwort 👍 , da wäre aber doch noch was:

    #pragma once
    
    #ifndef ELMASCHINEN_H
    #define ELMASCHINEN_H
    

    Wofür ist das pragma once, und was bewirkt das ifndef ELMASCHINEN bzw das define...???

    2. Was ist eine Referenz??? Habs in der MSDN gesucht, da stehen aber nur irgendwelche verwirrenden bsp's



  • Artchi schrieb:

    // Datei: elMaschinen.h
    #pragma once
    
    #ifndef ELMASCHINEN_H
    #define ELMASCHINEN_H...
    

    rofl 👍
    doppelt gemoppelt hält besser?
    Wenn du das für so wichtig hältst, dan mach es so (nicht jeder Benutzer deiner Lib wird eine MS-Compiler haben und würde sich sonst an den Compilerwarnungen erfreuen müssen):

    #ifdef _MSC_VER
     #if _MSC_VER > 1000
      #pragma once
     #endif
    #endif
    
    #ifndef EL_MASCHINEN_H
    #define EL_MASCHINEN_H
    ...
    #endif
    

    Außerdem:
    [cpp]// Datei: elMaschinen.cpp

    #include "elMaschinen.h"

    elMaschinen::elMaschinen(float VerlLeistungNullGr, float VerlLeistungVierzGr, float Temp)

    : VLeistN (VerlLeistungNullGr), VLeistV (VerlLeistungVierzGr), Temperatur (Temp)
    {
    }[/cpp]Lieber konsequent bleiben 😃

    Moritz



  • Hi(e)lfe???!!!?

    #ifdef _MSC_VER
     #if _MSC_VER > 1000
      #pragma once
     #endif
    #endif
    
    #ifndef EL_MASCHINEN_H
    #define EL_MASCHINEN_H
    ...
    #endif
    

    Hä, schluck, schwitz... 😕 😕 😕
    Das sieht ja noch schlimmer aus als das erste?? 😮
    Gibts dazu vielleicht ne dummen bzw Anfänger- Erklärung (am besten für beides)???

    Ach und noch was --> Was ist ne Referenz????



  • cppNeuling schrieb:

    #ifdef _MSC_VER // wenn Microsoft-Compiler verwendet wird
     #if _MSC_VER > 1000 // wenn Compilerversion > 1000
      #pragma once // Schutz vor mehrfachen Includen; geht AFAIK nur auf MS-Compiler
     #endif
    #endif
    
    #ifndef EL_MASCHINEN_H // ebenfalls Schutz vor mehrfachem Includen (such mal nach "Include-Guards"); konventionelle Art
    #define EL_MASCHINEN_H
    ...
    #endif
    

    Ach und noch was --> Was ist ne Referenz????

    Sieh dir ein C++-Tutorial an (rechts oben auf den [Tutorial]-Link klicken).

    Moritz



  • Ok,ich habs mal soweit fertig, da kommen jetzt aber nen Paar Fehlermeldungen , mit denen ich nicht ganz klar komme:

    -Fehlerm_1: ...elmaschinen.h(17) error C2629: 'class elMaschinen (' unerwartet
    -Fehlerm_2: ...elmaschinen.h(17) error C2238: Unerwartete(s) Token vor ';'
    -Fehlerm_3: ...elmaschinen.cpp(6)error C2511: 'elMaschinen::elMaschinen' : Überladene Member-Funktion
    'void (float,float,float)' nicht in 'elMaschinen' gefunden
    Fehlerm_4: ...elmaschinen.h(28) : error C2092: Funktionen koennen keine Feldelemente sein

    Zu Felerm4:
    Es sollen 10 Verschiedene Bauteile angelegt u. deren Referenzen in einem Feld angelegt werden
    Dabei soll jedes Bauteil Gleiche Werte für verlustleistung und Zufallswerte für Temperat. erhalten.

    Header-Datei

    // Datei: elMaschinen.h
    #ifdef _MSC_VER // wenn Microsoft-Compiler verwendet wird
     #if _MSC_VER > 1000 // wenn Compilerversion > 1000
      #pragma once // Schutz vor mehrfachen Includen; geht nur auf MS-Compiler
     #endif
    #endif
    
    #ifndef EL_MASCHINEN_H // ebenfalls Schutz vor mehrfachem Includen (such mal nach "Include-Guards"); konventionelle Art
    #define EL_MASCHINEN_H 
    
    class elMaschinen
    {
    private:
        float VLeistN, VLeistV, Temperatur;
    
    public:
        void elMaschinen(float VerlLeistungNullGr=0, float VerlLeistungVierzGr=0, Temp=0);//Fehlerm_1,2
    
        void setVLeistN(float VerlLeistungNullGr);
        double getVLeistN(void);
    
        void setVLeistV(float VerlLeistungVierzGr);
        double getVLeistV(void);
    
        void setTemperatur(float Temp);
        double getTemperatur(void);
    
    	int Bauteile[10](float &Leist, float &Temp);//Fehlerm_4
    };
    
    #endif // EL_MASCHINEN_H
    

    cpp-Datei

    // Datei: elMaschinen.cpp
    
    #include "elMaschinen.h"
    
    elMaschinen::elMaschinen(float VerlLeistungNullGr, float VerlLeistungVierzGr, float Temp)//Fehlerm_3
    {
      VLeistN= VerlLeistungNullGr;
      VLeistV= VerlLeistungVierzGr;
      Temperatur=Temp;
    }
    
    void elMaschinen::setVLeistN(float VerlLeistungNullGr)
    {
      VLeistN=VerlLeistungNullGr;
    }
    
    double elMaschinen::getVLeistN(void)
    {
      return VLeistN;
    }
    
    void elMaschinen::setVLeistV(float VerlLeistungVierzGr)
    {
    	VLeistV= VerlLeistungVierzGr;
    }
    
    double elMaschinen::getVLeistV(void);
    {
    	return VLeistN;
    }
    
    void elMaschinen::setTemperatur(float Temp)
    {
    	Temperatur=Temp;
    }
    
    double elMaschinen::getTemperatur(void)
    {
    	return Temperatur;
    }
    


  • int Bauteile[10](float &Leist, float &Temp);//Fehlerm_4
    

    Was willst du damit bezwecken?



  • int Bauteile[10](float &Leist, float &Temp);//Fehlerm_4

    Was willst du damit bezwecken?

    Zu Felerm4:
    Es sollen 10 Verschiedene Bauteile angelegt u. deren Referenzen in einem Feld angelegt werden
    Dabei soll jedes Bauteil Gleiche Werte für verlustleistung und Zufallswerte für Temperat. erhalten.



  • du definierst damit aber eine Methode, die int als returntyp hat und Bauteil[10] heißt und da meckert der Complier, weil Bezeichner keine eckigen Klammern haben dürfen.



  • int Bauteile[10](float &Leist, float &Temp);//Fehlerm_4

    Was willst du damit bezwecken?

    Zu Felerm4:
    Es sollen 10 Verschiedene Bauteile angelegt u. deren Referenzen in einem Feld angelegt werden
    Dabei soll jedes Bauteil Gleiche Werte für verlustleistung und Zufallswerte für Temperat. erhalten.

    Wie mach ich sowas dann???

    PS: Alle anderen Fehler hab ich behoben.



  • ich verstehe nicht wie du das meinst 😕
    Meinst du mit Bauteile ein Objekt deiner Klasse?



  • Hier nochmal meine Aufgabe:

    Aufgabenstellung war:
    Eine Klasse für "elektrische Bauteile" schreiben
    Klasse soll folgende Attribute haben:
    Verlustleistung bei 0 Grad, V-Leistung bei 40 Grad und die Temperatur
    Für jedes Attribut soll es Set und Get- Methode geben
    Es sollen 10 Verschiedene Bauteile angelegt u. deren Referenzen in einem Feld angelegt
    werden Dabei soll jedes Bauteil Gleiche Werte für Verlustleistung und Zufallswerte für
    Temperatur erhalten.

    dann müsste das schon ein Objekt meiner Klasse sein oder???
    Aber wie bring ich cpp jetzt die 10 Bauteile bei????

    So wies ich machen wollte schmeckts cpp nicht 😞



  • elMaschienen bauteile[10]; //Damit legst du 10 Bauteile vom Typ deiner Klasse an
    


  • Danke für die Antworten, ich versuch den Rest jetzt selbst, dürfte durch eure hilfe glaub kein Problem mehr sein!!!

    Thx 👍


Anmelden zum Antworten