c++ spiel kompilieren

js-mueller

Erfahrenes Mitglied
Hi

ich hab mich mal rangesetzt und wollt eein kleines Spiel coden. Soll nichts tolle ssein einfach so zum üben.
Kaesekästchen kennt ja jeder glaube ich :)

So ich bekomme beim kompilieren folgende fehler, und wich weiss ums verrecken nicht wieso.

In file included from kaesekaestchen.cpp:2:
kaese.h:9: ISO C++ forbids initialization of member `figur1'
kaese.h:9: making `figur1' static
kaese.h:9: ISO C++ forbids in-class initialization of non-const static member
figur1'
kaese.h:10: ISO C++ forbids initialization of member `figur2'
kaese.h:10: making `figur2' static
kaese.h:10: ISO C++ forbids in-class initialization of non-const static member
`figur2'
kaese.h:12: declaration does not declare anything
kaese.h:12: parse error before `[' token
kaese.h:22: invalid use of member `kaese::spieler'
kaese.h:22: invalid data member initialization
kaese.h:22: (use `=' to initialize static data members)
kaese.h:22: variable or field `feldSetzen' declared void
kaesekaestchen.cpp: In function `int main()':
kaesekaestchen.cpp:14: no matching function for call to `kaese::feldsetzen()'
In file included from kaese.cpp:2:
kaese.h:9: ISO C++ forbids initialization of member `figur1'
kaese.h:9: making `figur1' static
kaese.h:9: ISO C++ forbids in-class initialization of non-const static member
figur1'
kaese.h:10: ISO C++ forbids initialization of member `figur2'
kaese.h:10: making `figur2' static
kaese.h:10: ISO C++ forbids in-class initialization of non-const static member
`figur2'
kaese.h:12: declaration does not declare anything
kaese.h:12: parse error before `[' token
kaese.h:22: invalid use of member `kaese::spieler'
kaese.h:22: invalid data member initialization
kaese.h:22: (use `=' to initialize static data members)
kaese.h:22: variable or field `feldSetzen' declared void
kaese.cpp:29: invalid use of member `kaese::spieler'
kaese.cpp:30: `void kaese::feldSetzen' is not a static member of `class kaese'
kaese.cpp:30: variable `void kaese::feldSetzen' has initializer but incomplete
type
kaese.cpp:30: syntax error before `{' token
kaese.cpp:32: syntax error before `>>' token

Dies ist mein code:
Code:
kaesekaestchen.cpp:

#include <iostream>
#include "kaese.h"
using namespace std;

int main()
{
	kaese spiel;
	
	int ende = 0;
	
	while(ende == 0)
	{
		//spiel.spielfeldZeichnen();
		spiel.feldsetzen();
	}


	
	return 0;
}

kaese.h:

#ifndef _KAESE_
#define _KAESE_

class kaese
{
	private:   
	
		char feld[3][3];	
		char figur1 = '1';
		char figur2 = '2';
		
		char[2] eingabe;
		
		int spieler;
			
	public:
		
		kaese();
		
		void spielfeldZeichnen();
		
		void feldSetzen(spieler);
		
		bool spielende();	
};
#endif

kaese.cpp:

#include <iostream>
#include "kaese.h"

using namespace std;

kaese::kaese()
{
		feld[0][0] = ' ';
		feld[0][1] = ' ';
		feld[0][2] = ' ';
		feld[1][0] = ' ';
		feld[1][1] = ' ';
		feld[1][2] = ' ';
		feld[2][0] = ' ';
		feld[2][1] = ' ';
		feld[2][2] = ' ';
}
/*void kaese::spielfeldZeichnen()
{
	system("cls");
	
	cout << " " << feld[0][0] << " | " << feld[0][1] << " | " << feld[0][2] << " \n";
	cout << "---|---|---\n";
	cout << " " << feld[1][0] << " | " << feld[1][1] << " | " << feld[1][2] << " \n";
	cout << "---|---|---\n";                                         
	cout << " " << feld[2][0] << " | " << feld[2][1] << " | " << feld[2][2] << " \n";
}   */

void kaese::feldSetzen(spieler)
{
	cout << "Bitte naechsten Zug angeben: ";
	cin >> eingabe;
	
	if(spieler == 1)
	{
		felder[eingabe[0]][eingabe[1]] = figur1;
	}
	else
	{
		felder[eingabe[0]][eingabe[1]] = figur2;	
	} 	
}

Ich hoffe es ist nicht irgendwo ein doofer fehler :-/ Sind meine ersten gehversuche in cpp.
Danke schonmal für die hilfe
 
Zuletzt bearbeitet:
Das

Code:
class blah
{
[...]
int i = 0;
[...]
};

Geht nicht unter C++. Es musst statt dessen heißen:

Code:
class blah
{
[...]
int i = 0;
[...]
blah() : i(0) {[...]}
};

MfG

Tobias
 
Tschuldigung, aber ich versthe nicht so ganz was du meinst. Wäre nett wenn das jmd. nochmal genauer sagen könnte
 
Du musst doch einfach nur, die Fehlermeldungen des Compilers beheben:
kaese.h:9: ISO C++ forbids initialization of member `figur1'
Code:
char figur1 = '1';
Das darfst du nicht in der Klassendeklaration machen, (nur wenn es static ist) verschieb das einfach in den Konstruktor.

kaese.h:12: declaration does not declare anything
kaese.h:12: parse error before `[' token

Code:
char eingabe[2]; // so wäre das richtig

usw, usw, usw....
Die anderen Fehler versuch selbst zu beheben. Bzw. nimm mal ein Buch und lies dir die Grundlagen von Klassen und deren Deklarationen durch.

Gruss Homer
 
Darf ich klassen im Private bereich nicht deklarieren, oder nicht initialisieren?
ich hab ja nen Buch nach dem ich Arbeite, aber da steht nicht das man es nicht initialisieren darf ( steht auch net da, dass man es darf :))
 
K danke funktioniert alles.
Doch ich habe nochmal ne Frage wie kann ich überprüfen ob auch wirklich mit cin ein integer übergeben wurde?
Weil wenn ich bei cin nen a angebe funktioniert die ganze sache ja nicht mehr. Also hab ich den array von char auf int gestellt. Nun stürzt mir dasd Prog ab, wenn ich nen a schreibe oder so
 
Also bei Eingaben solltest du grunsätzlich Zeichenketten verwenden. Und erst danach überprüfen, ob sich die Zeichenkette in ein Integer umwandeln lässt, dann umwandeln.
Ist sicherer.

Gruss Homer
 
Zurück