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(); }
-
- Was heißt "Funktioniert nicht" konkret? Die markierte Codezeile ist nämlich korrekt.
- Aber: Deine Funktion
SetmaxP
nimmt doch einen Parametera
, du solltest ihn also nicht innerhalb dieser Funktion einlesen (auch wenn das funktioniert). Du willst dochz1.SetmaxP(100)
schreiben können, um den Wert auf 100 zu setzen und nicht, um dann nochmal eine Zahl eingeben zu müssen. - Dein gesamtes Programm funktioniert doch. Du rufst
SetmaxP
nur nie auf. Wenn du den Aufruf immain
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?
-
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 namensz1
, die einen Rückgabewert vom TypMaximalpunktzahl
hat. Wenn du eine Variable vom TypMaximalpunktzahl
namensz1
ohne Konstruktorargumente definieren möchtest, wäre dasMaximalpunktzahl 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 demSetmaxP
muss weg.
-
-
@wob Vielen Dank. Jetzt verstehe ich es besser wie das funktioniert