[Anfänger]Switch Case mit Funktion Code
-
cooky451 schrieb:
#include <limits> std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
Wunderbar!
Dankeschön funktioniert ich meld mich wieder falls ich ein Problem haben sollte.
-
Was spricht denn gegen
string korrekt; getline(cin, korrekt);
?
-
Hallo,
Ich hab mal wieder ein neues Problem
Das irgentwie nicht lösbar für mich ist.
Ich hab dran 1 Stunde gearbeitet aber es funktioniert einfach nicht egal was ich mache.
Und nun bitte ich euch mir zu helfen.
Bin noch ein neuling und aus fehlern lernt man.
Also es geht um folgendes
Ich hab eine Funktion erstellt und in dieser Funktion wird eine Klasse erstellt
Und direkt da runter soll die Klasse einen Namen bekommen und daraufhin sollen die
Einzelnen Variabeln bestimmt werden und danach sollen die Varibeln in einem Cout Befehl aufgerufen werden aber es funktioniert irgentwie nicht.
Versteht mich nicht falsch ich bin kein Fan von Waffen oder jeglichem aber mit waffen lassen sich einfachere Variabel namen machen wie Name Preis Druch etc.
Ich bin gegen Krieg und Waffen.Hier mal die fehlermeldungen:
C:\Dev-Cpp\Yardgame2.cpp In functionint func1(int)': 80 C:\\Dev-Cpp\\Yardgame2.cpp non-local function \
func1(int)::M4 sturmgewaehr()' uses local type `func1(int)::M4'
81 C:\Dev-Cpp\Yardgame2.cpp request for member `M4_Name' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 82 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
M4_preis' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 83 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
M4_druck' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 85 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
M4_Name' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 85 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
preis_M4' in `sturmgewaehr', which is of non-class typefunc1(int)::M4 ()()' 85 C:\\Dev-Cpp\\Yardgame2.cpp request for member \
druck_M4' in `sturmgewaehr', which is of non-class type `func1(int)::M4 ()()'
C:\Dev-Cpp\Makefile.win [Build Error] [Yardgame2.o] Error 1Und hier mal der Code von der Funktion und alles was damit zu tun hat
int func1(int classic = 1); void AK::abzugdruck() //hier wird die Func1 aufgerufen { func1(); staerke = 55; } int func1(int classic) { class M4 //Das ist die klasse { public: double preis_M4; string M4_Name; int druck_M4; }; M4 sturmgewaehr(); sturmgewaehr.M4_Name = "M4-Sturmgewaehr"; sturmgewaehr.M4_preis = 25,500; sturmgewaehr.M4_druck = 25; cout << "Die Waffen werden für den Krieg gebraucht ):" << endl; cout << "Die " << sturmgewaehr.M4_Name() << " Kostet " << sturmgewaehr.preis_M4() << " Und hat einen Wiederstand von " << sturmgewaehr.druck_M4() << endl; }
Und hier mal der Komplette quelltext:
#include <cstdlib> #include <iostream> using namespace std; void func(); int func1(int classic = 1); class AK { string name; int staerke; public: double preis; string druck; //Rückgabewert <Name der Methode> Parameterliste void abzugdruck(); //void setGeschwindigkeit(int g); int getstaerke(); string getName(); AK(string n); ~AK(); }; AK::AK(string n) { name = n; staerke = 50; preis = 2999; druck = "Mittlerer Druck"; cout << "Die Waffe wurde verkauft" << name << endl; } AK::~AK() { cout << "Die Ak wurde verkauft" << endl; } void AK::abzugdruck() { func1(); staerke = 55; } int AK::getstaerke() { return staerke; } string AK::getName() { return name; } int main() { AK Automatikk("Automatik"); Automatikk.abzugdruck(); func(); Automatikk.getstaerke(); cout << "Du hast die AK abgefeuert Staerke = " << Automatikk.getstaerke() << endl; system("PAUSE"); } void func() { AK Schalldampf("Schalldaempfer"); } int func1(int classic) { class M4 { public: double preis_M4; string M4_Name; int druck_M4; }; M4 sturmgewaehr(); sturmgewaehr.M4_Name = "M4-Sturmgewaehr"; sturmgewaehr.M4_preis = 25,500; sturmgewaehr.M4_druck = 25; cout << "Die Waffen werden für den Krieg gebraucht ):" << endl; cout << "Die " << sturmgewaehr.M4_Name() << " Kostet " << sturmgewaehr.preis_M4() << " Und hat einen Wiederstand von " << sturmgewaehr.druck_M4() << endl; }
-
Du hast da einen Klassiker erwischt: In Zeile 19 wird kein default-konstruiertes Objekt angelegt, sondern eine Funktion deklariert, die keine Parameter übernimmt und ein M4 zurückgeben soll.
PS: Außerdem wird in C++ der Punkt als Dezimaltrenner verwendet, das Komma in
sturmgewaehr.M4_preis = 25,500;
hat eine andere Funktion.PPS: Und "Sturmgewehr" schreibt man ohne a
-
CStoll schrieb:
Du hast da einen Klassiker erwischt: In Zeile 19 wird kein default-konstruiertes Objekt angelegt, sondern eine Funktion deklariert, die keine Parameter übernimmt und ein M4 zurückgeben soll.
PS: Außerdem wird in C++ der Punkt als Dezimaltrenner verwendet, das Komma in
sturmgewaehr.M4_preis = 25,500;
hat eine andere Funktion.PPS: Und "Sturmgewehr" schreibt man ohne a
Danke schön aber ich weiß leider nicht was ein default-konstruiertes Objekt ist ??
Kannst/Könnt du/ihr mir ein Beispiel Zeigen
Und das mit PS und PPS ist ja mal ein Fail von meiner seite aus das wird ausgebessert.Vielen Dank für die hilfe
-
Ein default-konstruiertes Objekt ist etwas, was du mit dem Default-Konstruktor angelegt hast (d.h. der Konstruktor ohne PArameter, den dir der Compiler zur Not auch selber anlegen kann). Sowas erhältst du am einfachsten durch die Angabe
M4 sturmgewehr;
(ohne die Klammern dahinter).
-
CStoll schrieb:
Ein default-konstruiertes Objekt ist etwas, was du mit dem Default-Konstruktor angelegt hast (d.h. der Konstruktor ohne PArameter, den dir der Compiler zur Not auch selber anlegen kann). Sowas erhältst du am einfachsten durch die Angabe
M4 sturmgewehr;
(ohne die Klammern dahinter).Dankeschön jetzt klappts
Edit: Doch nicht ich bekomm die Fehlermeldungen:
C:\Dev-Cpp\Yardgame2.cpp In functionint func1(int)': 85 C:\\Dev-Cpp\\Yardgame2.cpp no match for call to
(std::string) ()'
85 C:\Dev-Cpp\Yardgame2.cppsturmgewehr.func1(int)::M4::preis_M4' cannot be used as a function 85 C:\\Dev-Cpp\\Yardgame2.cpp
sturmgewehr.func1(int)::M4::druck_M4' cannot be used as a function
C:\Dev-Cpp\Makefile.win [Build Error] [Yardgame2.o] Error 1
-
Kann mir niemand helfen mit den Oben genannten Problem?
-
Um die Klassen-Member auszugeben benötigst du auch keine Funktions-Klammern.
PS: Übrigens hat diese Klasse nicht besonders viel Sinn - sie ist außerhalb der Funktion nicht bekannt und enthält auch nichts wirklich sinnvolles.
-
CStoll schrieb:
Um die Klassen-Member auszugeben benötigst du auch keine Funktions-Klammern.
PS: Übrigens hat diese Klasse nicht besonders viel Sinn - sie ist außerhalb der Funktion nicht bekannt und enthält auch nichts wirklich sinnvolles.
Ok Danke schön klappt jetzt alles perfekt.
Und ich hab das nur gemacht damit ich klassen lerne.
Villeicht brauch ich es ja eines Tages noch wer weiß.
-
bero36 schrieb:
Und ich hab das nur gemacht damit ich klassen lerne.
Wenn du Klassen kennenlernen willst, dann schreib dir auch eine ordentliche Klasse (inklusive Datenkapselung, Methoden und allem was dazugehört), nicht so ein schlecht getarntes struct.
-
CStoll schrieb:
bero36 schrieb:
Und ich hab das nur gemacht damit ich klassen lerne.
Wenn du Klassen kennenlernen willst, dann schreib dir auch eine ordentliche Klasse (inklusive Datenkapselung, Methoden und allem was dazugehört), nicht so ein schlecht getarntes struct.
Ok Danke werde ich machen.
Ich habe leider ein neues Problem:
Es geht um folgendes
Ich mach grad so test sachen nix wichtiges.
Ich arbeite zurzeit an solchen Menüs
Also mit Switch Case und Do While - Schleife
Mein Problem ist sobald ich im Menü mit einem Buchstaben etwas auswähle stürzt das Programm einfach ab
Hier mal der Quellcode villeicht hilft mir ja einer.
Danke das ihr mir hilft.#include <cstdlib> #include <iostream> #include <conio.h> #include <string> #include <limits> using namespace std; string name; string highscore(string highscore_game = "HighScore"); string start(string newgame = "Game"); int main() { string name; char korrekt; do { cout<<"Bitte Name eingeben"<<endl; getline(cin,name);//liest auch Namen mit Leerzeichen ein - bis zum ENTER cout<<"Ist "<<name<<" korrekt? (Bitte mit Yes oder yes antworten)"<<endl; cin>>korrekt; cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } while(toupper(korrekt)!='Y'); char Auswahl_1; do { cout << "(N)eues Spiel" << endl; cout << "(H)ighscore" << endl; cout << "(C)redits" << endl; cout << "(B)eenden" << endl; cout << "Eingabe 1: " << endl; cin>>Auswahl_1; switch(Auswahl_1) { case ('N'): case ('n'): cout << "Neues Spiel wird gestartet" << endl; start(); break; case ('h'): case ('H'): cout << "Highscore Liste wird geladen" << endl; highscore(); break; case ('C'): case ('c'): cout << "Entwickler: Bero01 Copyright 2011" << endl; break; case ('B'): case ('b'): cout << "Programm wird beendet" << endl; break; default: cout << "Keine Korrekte angabe" << endl; break; } getch(); } while(Auswahl_1 != 'B' && Auswahl_1 != 'b'); system("Pause"); return 0; } string start(string newgame) { cout << "Neues Spiel wurde gestartet" << endl; cout << "---------------------------" << endl; cout << "Game Maker wurde gestartet..." << endl; cout << "Um was fuer ein Spiel-Type soll es sich handeln?\n Bitte waehle aus: " << endl; cout << "(A)benteuer" << endl; cout << "(S)hooter" << endl; cout << "(R)ennen" << endl; cout << "(M)enue" << endl; char Auswahl_2; do { cout << "Eingabe 2: " << endl; cin >> Auswahl_2; switch(Auswahl_2) { case ('A'): case ('a'): cout << "Du hast Abenteuer ausgewaehlt" << endl; break; case ('s'): case ('S'): cout << "Du hast Shooter ausgewaehlt" << endl; break; case ('R'): case ('r'): cout << "Du hast Rennen ausgewaehlt" << endl; break; case ('M'): case ('m'): cout << "Menu" << endl; break; default: cout << "Keine Korrekte angabe" << endl; break; } } while(Auswahl_2 != 'M' && Auswahl_2 != 'm'); system("Pause"); return 0; } string highscore(string highscore_game) { cout << "----------------------------" << endl; cout << "Highscore Liste wurde geladen" << endl; }
-
bero36 schrieb:
// irgendsone_bibliotheksdateien string start(string newgame = "Game"); int main() { // irgendein_code switch(Auswahl_1) { case ('N'): case ('n'): cout << "Neues Spiel wird gestartet" << endl; start(); break; // irgendwelche_weiteren_cases } return 0; } string start(string newgame) { // irgendein_code return 0; }
Funktionsaufbau:
Rückgabetyp Funktionsname(Parameter);
Datentypen:
Integer: 0
Float: 0.0f
Char: '0'
String: "0"Finde den Fehler
-
Holymagic schrieb:
bero36 schrieb:
// irgendsone_bibliotheksdateien string start(string newgame = "Game"); int main() { // irgendein_code switch(Auswahl_1) { case ('N'): case ('n'): cout << "Neues Spiel wird gestartet" << endl; start(); break; // irgendwelche_weiteren_cases } return 0; } string start(string newgame) { // irgendein_code return 0; }
Funktionsaufbau:
Rückgabetyp Funktionsname(Parameter);
Datentypen:
Integer: 0
Float: 0.0f
Char: '0'
String: "0"Finde den Fehler
Tut mir leid ich find den fehler nicht
Kann es an dem Parameter start(); liegen?
Da es nicht die Variabel newgame enthält oder so ähnlich?Edit:Habs hinbekommen es klappt.