Sparschwein
-
Hier noch die Fehlermeldungen, falls diese weiterhelfen:
haupt.C:7:6: error: invalid suffix "cent" on integer constant
int 1cent;
^
haupt.C:8:6: error: invalid suffix "cent" on integer constant
int 5cent;
^
haupt.C:9:6: error: invalid suffix "cent" on integer constant
int 10cent;
^
haupt.C:29:10: error: invalid suffix "cent" on integer constant
cin >> 1cent;
^
haupt.C:32:10: error: invalid suffix "cent" on integer constant
cin >> 5cent;
^
haupt.C:35:10: error: invalid suffix "cent" on integer constant
cin >> 10cent;
^
haupt.C:37:27: error: invalid suffix "cent" on integer constant
sparschwein ::einwerfen(1cent, 5cent, 10cent);
^
haupt.C:37:34: error: invalid suffix "cent" on integer constant
sparschwein ::einwerfen(1cent, 5cent, 10cent);
^
haupt.C:37:41: error: invalid suffix "cent" on integer constant
sparschwein ::einwerfen(1cent, 5cent, 10cent);
^
haupt.C:43:23: error: invalid suffix "cent" on integer constant
sparschwein ::print(1cent, 5cent, 10cent);
^
haupt.C:43:30: error: invalid suffix "cent" on integer constant
sparschwein ::print(1cent, 5cent, 10cent);
^
haupt.C:43:37: error: invalid suffix "cent" on integer constant
sparschwein ::print(1cent, 5cent, 10cent);
^
haupt.C: In function ‘int main()’:
haupt.C:7:6: error: expected unqualified-id before numeric constant
int 1cent;
^
haupt.C:8:6: error: expected unqualified-id before numeric constant
int 5cent;
^
haupt.C:9:6: error: expected unqualified-id before numeric constant
int 10cent;
^
haupt.C:23:3: error: ‘sparschwein’ has not been declared
sparschwein ::leeren();
^
haupt.C:37:3: error: ‘sparschwein’ has not been declared
sparschwein ::einwerfen(1cent, 5cent, 10cent);
^
haupt.C:43:3: error: ‘sparschwein’ has not been declared
sparschwein ::print(1cent, 5cent, 10cent);
^
sparschwein.C:12:1: error: expected ‘;’ after class definition
}
^
sparschwein.C:23:6: error: prototype for ‘void sparschwein::einwerfen(int, int)’ does not match any in class ‘sparschwein’
void sparschwein ::einwerfen(int muenz_art, int anzahl){
^
sparschwein.C:9:7: error: candidate is: int sparschwein::einwerfen(int, int)
int einwerfen(int muenz_art, int anzahl);
^
sparschwein.C:29:6: error: prototype for ‘void sparschwein::print(int, int, int)’ does not match any in class ‘sparschwein’
void sparschwein ::print(int cent1, int cent5, int cent10){
^
sparschwein.C:10:7: error: candidate is: int sparschwein::print(int, int, int)
int print(int cent1, int cent5, int cent10);
-
int was;
int 1cent;
int 5cent;
int 10cent;Variablennamen müssen mit einem Buchstaben oder _ beginnen.
-
Hallo
Ich glaube du solltest dir erst noch mal anschauen wie man Klassen arbeitet.
Als Beispiel, definieren der Klasse:
class MyClass { int par_; public: // Standard-Konstruktor MyClass(); // Konstruktor mit Parameter MyClass(int par); // Member-Funktionen void TueEtwas(); int ErmittleWas(); }; MyClass::MyClass() : par_(0) {} MyClass::MyClass(int par) : par_(par) {} void MyClass:TueEtwas() { ++par_; } int MyClass::ErmittleWas() { return par_; }
Und so verwendet man die Klasse:
#include <iostream> // Ein Objekt erzeugen mit den StandardKonstruktor MyClass myObj1; // Ein Objekt erzeugen, mit dem Konstruktor mit Parametern MyClass myObj2(5); // Die Funktionen auf der Klasse rufen myObj1.TueEtwas(); myObj2.TueEtwas(); std::cout << myObj1.ErmittleWas() << " - " << myObj2.ErmittleWas();
Und danach würde ich mal anfangen die Aufgabenstellung 1:1 in eine Klasse zu gießen, als Vorlage schreib ich dir die Main-Funktion, die nach deinem Umbau funktionieren muss:
int main() { // Erzeuge ein leeres Sparschwein Sparschwein a; a.print(); // Erzeuge ein Sparschwein mit einem direkten Inhalt Sparschwein b = 10; b.print(); // Erzeuge ein Sparschwein mit vielen Münzen Sparschwein c(47, 11, 42); c.print(); // Erzeuge leeres Sparschwein mit nachfolgenden Einwurf Sparschwein d; d.einwerfen(0, 8, 15); d.print(); // Und wieder leeren d.leeren(); d.print(); };
Die Ausgabe dazu müsste dann wie folgt lauten:
0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent 10 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent 47 * 1 Cent + 11 * 5 Cent + 42 * 10 Cent = 522 Cent 0 * 1 Cent + 8 * 5 Cent + 15 * 10 Cent = 190 Cent 0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent
Gruß Marco
-
Danke, ich denke ich verstehe jetzt wie die Aufgabe eigentlich zu verstehen ist.
Ja ich weiß, da ich noch nichts mit Klassen zu tun hatte und gerade erst angefangen habe damit, fällt es mir momentan noch sehr schwer sie überhaupt zu definieren.Danke für die Ansätze, werde es morgen gleich versuchen umzusetzen
-
Ich habe es jetzt nochmal versucht, ganz einfach nur immer alles mit cout auszugeben. Leider funktioniert nicht mal das...
class Sparschwein{ int inhalt; int muenzen[3]; public: a.print(); b.print(); c.print(); d.einwerfen(); d.print(); d.leeren(); d.print(); }; void ::a.print() { cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl; } void ::b.print() { cout << "10 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent" << endl; } void ::c.print() { cout << "47 * 1 Cent + 11 * 5 Cent + 42 * 10 Cent = 522 Cent" << endl; } void ::d.einwerfen(0, 8, 15) { ::d.print(0,8,15); } void ::d.print(0,8,15) { cout << "0 * 1 Cent + 8 * 5 Cent + 15 * 10 Cent = 190 Cent" << endl; } void ::d.leeren() { ::d.print(); } void ::d.print() { cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl; }
-
Was heißt denn das funktioniert nicht? Wir haben keine Glaskugeln.
-
Damit meine ich, es kommt beim kompilieren folgende Fehlermeldung:
Sparschwein.C:7:3: error: ‘a’ does not name a type
a.print();
^
Sparschwein.C:8:3: error: ‘b’ does not name a type
b.print();
^
Sparschwein.C:9:3: error: ‘c’ does not name a type
c.print();
^
Sparschwein.C:10:3: error: ‘d’ does not name a type
d.einwerfen();
^
Sparschwein.C:11:3: error: ‘d’ does not name a type
d.print();
^
Sparschwein.C:12:3: error: ‘d’ does not name a type
d.leeren();
^
Sparschwein.C:13:3: error: ‘d’ does not name a type
d.print();
^
Sparschwein.C:16:9: error: expected initializer before ‘.’ token
void ::a.print() {
^
Sparschwein.C:22:9: error: expected initializer before ‘.’ token
void ::b.print() {
^
Sparschwein.C:28:9: error: expected initializer before ‘.’ token
void ::c.print() {
^
Sparschwein.C:34:9: error: expected initializer before ‘.’ token
void ::d.einwerfen(0, 8, 15) {
^
Sparschwein.C:39:9: error: expected initializer before ‘.’ token
void ::d.print(0,8,15) {
^
Sparschwein.C:45:9: error: expected initializer before ‘.’ token
void ::d.leeren() {
^
Sparschwein.C:51:9: error: expected initializer before ‘.’ token
void ::d.print() {
^
In file included from haupt.C:2:0:
Sparschwein.C:7:3: error: ‘a’ does not name a type
a.print();
^
Sparschwein.C:8:3: error: ‘b’ does not name a type
b.print();
^
Sparschwein.C:9:3: error: ‘c’ does not name a type
c.print();
^
Sparschwein.C:10:3: error: ‘d’ does not name a type
d.einwerfen();
^
Sparschwein.C:11:3: error: ‘d’ does not name a type
d.print();
^
Sparschwein.C:12:3: error: ‘d’ does not name a type
d.leeren();
^
Sparschwein.C:13:3: error: ‘d’ does not name a type
d.print();
^
Sparschwein.C:16:9: error: expected initializer before ‘.’ token
void ::a.print() {
^
Sparschwein.C:22:9: error: expected initializer before ‘.’ token
void ::b.print() {
^
Sparschwein.C:28:9: error: expected initializer before ‘.’ token
void ::c.print() {
^
Sparschwein.C:34:9: error: expected initializer before ‘.’ token
void ::d.einwerfen(0, 8, 15) {
^
Sparschwein.C:39:9: error: expected initializer before ‘.’ token
void ::d.print(0,8,15) {
^
Sparschwein.C:45:9: error: expected initializer before ‘.’ token
void ::d.leeren() {
^
Sparschwein.C:51:9: error: expected initializer before ‘.’ token
void ::d.print() {
^
haupt.C: In function ‘int main()’:
haupt.C:8:4: error: ‘class Sparschwein’ has no member named ‘print’
a.print();
^
haupt.C:10:18: error: conversion from ‘int’ to non-scalar type ‘Sparschwein’ requested
Sparschwein b = 10;
^
haupt.C:11:4: error: ‘class Sparschwein’ has no member named ‘print’
b.print();
^
haupt.C:13:26: error: no matching function for call to ‘Sparschwein::Sparschwein(int, int, int)’
Sparschwein c(47, 11, 42);
^
haupt.C:13:26: note: candidates are:
In file included from haupt.C:2:0:
Sparschwein.C:1:7: note: Sparschwein::Sparschwein()
class Sparschwein{
^
Sparschwein.C:1:7: note: candidate expects 0 arguments, 3 provided
Sparschwein.C:1:7: note: Sparschwein::Sparschwein(const Sparschwein&)
Sparschwein.C:1:7: note: candidate expects 1 argument, 3 provided
haupt.C:14:4: error: ‘class Sparschwein’ has no member named ‘print’
c.print();
^
haupt.C:17:4: error: ‘class Sparschwein’ has no member named ‘einwerfen’
d.einwerfen(0, 8, 15);
^
haupt.C:18:4: error: ‘class Sparschwein’ has no member named ‘print’
d.print();
^
haupt.C:20:4: error: ‘class Sparschwein’ has no member named ‘leeren’
d.leeren();
^
haupt.C:21:4: error: ‘class Sparschwein’ has no member named ‘print’
d.print();
^
-
Warum genau setzt du "a." davor?
-
Weil ich nach der Angabe von Marc-O gehe in meiner Main.
Also a.print() bedeutet 0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent.
In der Angabe, die ich bekommen habe steht auch: Sparschwein a; // erzeugt ein leeres Sparschwein
Sparschwein b=10; // erzeugt ein Sparschwein mit 10 Eincentmünzen als Inhalt
Sparschwein c(2,3,4); // erzeugt ein Sparschwein mit 2 Eincent-, 3 Fünfcent- und 4 Zehncentmünzen als Inhalt
-
Deine Klassendefinition ist trotzdem falsch und das "a.Print" macht so keinen Sinn.
class Sparschwein{ int inhalt; int muenzen[3]; public: void print(); void einwerfen(int muenze); void leeren(); };
Wenn dann muss das so aussehen.
-
also mehr so in diese Richtung?
Tut mir sehr leidl, dass ich noch so wenig Ahnung habe von Klassen, fällt mir schwer daher das ganze zu verstehen.class Sparschwein{ int inhalt; int muenzen[3]; public: void print(); void einwerfen(int muenze); void leeren(); }; void ::a.print() { cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl; } void ::b.print() { cout << "10 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 10 Cent" << endl; } void ::c.print() { cout << "47 * 1 Cent + 11 * 5 Cent + 42 * 10 Cent = 522 Cent" << endl; } void ::d.print() { cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl; } void ::d.einwerfen() { ::d.print(0,8,15); } void ::d.print(0,8,15) { cout << "0 * 1 Cent + 8 * 5 Cent + 15 * 10 Cent = 190 Cent" << endl; } void ::d.leeren() { ::d.print(0,0,0); } void ::d.print(0,0,0) { cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl; }
-
Hallo,
class Sparschwein{ int inhalt; int muenzen[3]; public: void print(int firstCoin, int secondCoind, int thirdCoin); void einwerfen(int firstCoin, int secondCoind, int thirdCoin); void leeren(); }; void Sparschwein::print(int firstCoin, int secondCoind, int thirdCoin) { cout << "0 * 1 Cent + 0 * 5 Cent + 0 * 10 Cent = 0 Cent" << endl; } void Sparschwein::einwerfen(int firstCoin, int secondCoin, int thirdCoin) { ::print(firstCoind, secondCoin, thirdCoin); } void Sparschwein::leeren() { ::print(0,0,0); }
-
Das ganze würde dann aber nicht mehr mit der alten Main funktionieren oder?
Also nicht mehr mit:#include <iostream> #include "Sparschwein.C" using namespace std; int main () { Sparschwein a; a.print(); Sparschwein b = 10; b.print(); Sparschwein c(47, 11, 42); c.print(); Sparschwein d; d.einwerfen(0, 8, 15); d.print(); d.leeren(); d.print(); return 0; }
-
Wieso denn nicht? Wenn du die entsprechenden Konstruktoren noch implementierst sollte das Problemlos funktionieren.
-
Das heißt ich muss jetzt nur noch bei meiner Klasse immer jeweils a. b. c. d. print, einwerfen und leeren einbauen oder?
-
Achtung Spoiler!
-
warning: extended initializer lists only available with -std=c++11 or -std=gnu++11
int muenzen[3] {0, 0, 0};Liegt das eventuell, dass der Inhalt Privat ist und ich ihn nicht bearbeiten darf im Weiteren?
Denn default mäßig ist ja am Anfang alles Privat in der Klasse.
-
Nein, weiter kau ich dir jetzt nicht vor. - Dann musst du selbst mal google / die Doku bemühen wie du ein Array Initialisierst. - Außerdem scheint bei dir ja C++ 11 vorhanden zu sein, sonst wäre da keine Warnung sondern ein Compiler-Fehler.
-
Ich darf nicht nicht in der Klasse initialisieren, sondern erst im Konstruktor selbst, ist das richtig?
Danke für eure Hilfe!
PS: Habe es jetzt bereits gelöst, ein großes Dankeschön an euch, für eure Hilfe!
-
Eine Frage hätte ich noch, und zwar meint ihr, ob gefragt ist, dass man verschiedene Methoden einbaut? Also der Benutzer festlegen kann, ob das Sparschwein geleert wird, wie viel hinein gegeben werden soll, etc...