C++ lernen/ Erste Fragen.



  • Hallo,

    ich möchte die Sprache C++ erlernen. Dazu habe ich mir ein Buch besorgt und versuche es Stück für Stück durchzuarbeiten.
    Habe schon einiges an Theorie gelernt und möchte nun erste Schritte in der Programmierung machen. Das Programm, welches ich schreibe, möchte ich Stück für Stück um weitere Funktionen erweitern.
    Zuerst habe ich eine Klasse erstellt und kann auch schon Werte ausgeben.
    Nun reizt es mich das Programm so zu erweitern, dass man zuerst den Wert eingibt und dieser dann ausgegeben wird.
    Meine Fragen sind dabei: Wie setzt man das am besten um? - Habe es mit std::cin >> a; Probiert aber das funktioniert nicht.
    Auch scheitere ich immer daran die 50.5 durch eine Variable zu ersetzen.

    Hier mein code:

    //Maximalpunktzahl.h
    #pragma once
    #ifndef Maximalpunktzahl_h
    
    class Maximalpunktzahl
    {
    private:
    	double maxP;
    
    public:
    	Maximalpunktzahl(double maxP = 0);
    	void SetmaxP(double);
    	double GetmaxP() const;
    	void print();
    };
    
    
    #endif // !Maximalpunktzahl_h
    
    
    
    
    //Maximalpunktzahl.cpp
    
    #include "Maximalpunktzahl.h"
    #include <iostream>
    
    
    Maximalpunktzahl::Maximalpunktzahl(double a)
    {
    	this->maxP = a;
    }
    
    void Maximalpunktzahl::SetmaxP(double a)
    {
    	std::cin >> a; //Funktioniert nicht
    	this->maxP = a;
    	
    }
    
    double Maximalpunktzahl::GetmaxP() const
    {
    	return this->maxP;
    }
    
    void Maximalpunktzahl::print()
    {
    	std::cout << "Die Maximalpunktzahl betraegt: " << maxP;
    }
    
    //main.cpp
    
    #include <iostream>
    #include "Maximalpunktzahl.h"
    using namespace std;
    
    
    int main()
    {
    	Maximalpunktzahl z1(50.5);
    	z1.print();
    }
    


    1. Was heißt "Funktioniert nicht" konkret? Die markierte Codezeile ist nämlich korrekt.
    2. Aber: Deine Funktion SetmaxP nimmt doch einen Parameter a, du solltest ihn also nicht innerhalb dieser Funktion einlesen (auch wenn das funktioniert). Du willst doch z1.SetmaxP(100) schreiben können, um den Wert auf 100 zu setzen und nicht, um dann nochmal eine Zahl eingeben zu müssen.
    3. Dein gesamtes Programm funktioniert doch. Du rufst SetmaxP nur nie auf. Wenn du den Aufruf im main einbaust, funktioniert dein Programm.


  • @Tom24 Die include-Guards funktionieren nur, wenn man sie auch definiert.
    #define Maximalpunktzahl_h



  • @wob Ich meine damit, dass ich den Wert für maxP gerne selbst eingeben und nicht im code festlegen möchte. Mit std::cin >> a; habe ich versucht a von der Tastatur einzulesen und an maxP weiterzugeben. Allerdings muss ich logischerweise (denke ich) die Überladung in main bei Maximalpunktzahl entfernen (Maximalpunktzahl z1();). Dadurch bekomme ich aber folgende Fehler:

    • Fehler (aktiv) E0153 Der Ausdruck muss vom Typ "Klasse" sein, weist jedoch den Typ ""Maximalpunktzahl (*)()"" auf. (main, Zeile 10)
    • Fehler C2228 Links von ".print" müssen sich in einer Klasse/Struktur/Union befinden (main, Zeile 11)
      Was will der Compiler mir damit sagen?

    Genau das Programm funktioniert. Wie rufe ich SetmaxP in main auf?


  • Mod

    Ich habe keine Ahnung, was du mit "Überladung" meinst (offensichtlich nicht was jeder andere damit meint), aber Maximalpunktzahl z1(); ist wahrscheinlich nicht das, was du denkst. Denn das ist eine Deklaration einer Funktion namens z1, die einen Rückgabewert vom Typ Maximalpunktzahl hat. Wenn du eine Variable vom Typ Maximalpunktzahl namens z1 ohne Konstruktorargumente definieren möchtest, wäre das Maximalpunktzahl z1;.

    Doch nichts davon passt zu wobs Hinweisen.



  • @Tom24 sagte in C++ lernen/ Erste Fragen.:

    int main()
    {
    Maximalpunktzahl z1(50.5);
    z1.print();
    }

    Das zitierte ist dein main. Schreib mal:

    int main()
    {
    	Maximalpunktzahl z1(50.5);
    	z1.print();
            // gibt 50.5 aus
            std::cout << "\nBitte neue Maximalzahl eingeben:\n";
            double x;
            std::cin >> x;
            z1.SetmaxP(x);
            z1.print();  // das print hier gibt die gerade eingegebene Zahl aus
            std::cout << "\n"; // dein print gibt kein newline aus, daher hänge ich es hier ran
    }
    

    Und das cin aus dem SetmaxP muss weg.



  • @Tom24 sagte in C++ lernen/ Erste Fragen.:

    ich möchte die Sprache C++ erlernen.

    wozu?



  • @wob Vielen Dank. Jetzt verstehe ich es besser wie das funktioniert 🙂


Anmelden zum Antworten