Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

1

14.10.2008, 13:26

Paar Probleme bei Klassen

Hallo, ich versuche die Klassen noch ein wenig zu lernen, indem ich ein Mini-Strategie-Spiel programmiere. Das Buch bringt mich leider auch nicht weiter, und ich habe erfolglos Google.com und Google.de benutzt. Ich habe lange den Fehler gesucht - so wie ihr es mir bei meinem letzten Thread gesagt habt. Also mein Problem genau ist es, dass ich es nicht schaffe, meine in der Klasse erzeugte Variablen in eine andere Datei zu schreiben. Doch ein paar Zeilen Code sagt bekanntlich mehr als tausend Worte:

Hauptmenü.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <string>
#include "Klasse Spieler.hpp"
#include "Klasse Rohstoffe.hpp"

using namespace std;

int main ()
{
    Spieler Spieler;
    Rohstoffe Rohstoffe;

    Spieler::Klasse_Spieler (Staerke, Energie);
    Rohstoffe::Klasse_Rohstoffe (Kupfer, Silber, Gold);

    return 0;
}


Klasse Spieler.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
#include <iostream>
class Spieler
{
private:
    float Staerke;
    float Energie;

public:
    int Klasse_Spieler (float Staerke, float Energie);
};


Klasse Spieler.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include "Klasse Spieler.hpp"

using namespace std;

int Spieler::Klasse_Spieler (float Staerke, float Energie)
{
    Staerke = 10.5;
    Energie = 5.5;

    return 0;
}


Klasse Rohstoffe.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
class Rohstoffe
{
private:
    int Kupfer;
    int Silber;
    int Gold;

public:
    int Klasse_Rohstoffe (int Kupfer, int Silber, int Gold);
};


Klasse Rohstoffe.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include "Klasse Rohstoffe.hpp"

using namespace std;

int Rohstoffe::Klasse_Rohstoffe (int Kupfer, int Silber, int Gold)
{
    Kupfer = 1000;
    Silber = 100;
    Gold = 10;

    return 0;
}


Und zu guter Letzt: Die Fehlermeldung

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1>------ Neues Erstellen gestartet: Projekt: Strategott, Konfiguration: Debug Win32 ------
1>Die Zwischen- und Ausgabedateien für das Projekt "Strategott" mit der Konfiguration "Debug|Win32" werden gelöscht.
1>Kompilieren...
1>Hauptmenü.cpp
1>c:\users\luca\documents\visual studio 2008\projects\strategott\strategott\hauptmenü.cpp(13) : error C2065: 'Staerke': nichtdeklarierter Bezeichner
1>c:\users\luca\documents\visual studio 2008\projects\strategott\strategott\hauptmenü.cpp(13) : error C2065: 'Energie': nichtdeklarierter Bezeichner
1>c:\users\luca\documents\visual studio 2008\projects\strategott\strategott\hauptmenü.cpp(14) : error C2065: 'Kupfer': nichtdeklarierter Bezeichner
1>c:\users\luca\documents\visual studio 2008\projects\strategott\strategott\hauptmenü.cpp(14) : error C2065: 'Silber': nichtdeklarierter Bezeichner
1>c:\users\luca\documents\visual studio 2008\projects\strategott\strategott\hauptmenü.cpp(14) : error C2065: 'Gold': nichtdeklarierter Bezeichner
1>Klasse Spieler.cpp
1>Klasse Rohstoffe.cpp
1>Code wird generiert...
1>Das Buildprotokoll wurde unter "file://c:\Users\Luca\Documents\Visual Studio 2008\Projects\Strategott\Strategott\Debug\BuildLog.htm" gespeichert.
1>Strategott - 5 Fehler, 0 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Bitte um Hilfe,
MfG Luca.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

14.10.2008, 13:53

Zuerst einmal: WTF?!

So..

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
int main ()
{
    Spieler spieler;
    Rohstoffe rohstoffe;

    spieler.Klasse_Spieler (2, 2);
    rohstoffe.Klasse_Rohstoffe (2, 2, 2);

    return 0;
}


Das sollte reichen.

Allerdings sollte man dir aber mal gehörig auf die Finger klopfen. ;)
1. Keine Umlaute in Dateinamen!
2. Keine Whitespaces (leerzeichen, tabulatoren usw.) in Dateinamen!
3. Solltest du dir das Konzept von Klassen und die Regeln der Namensgebung nochmal anschauen. (Du kannst eine Klasse und ein Objekt nicht mit dem genau gleichen Namen bezeichnen!)
Sowie den Zugriff auf Klassen hast du auch nicht richtig verstanden (warum machst du da den :: Operator?!)
Dann bei der Übergabe an eine Funktion kannst du nicht einfach irgendwelche Namen übergeben, die keine Objekte sind. (Das hat dir aber auch bereits der Compiler gesagt..)

Also mein Tipp: Buch nochmal genau durchlesen.

Anonymous

unregistriert

3

14.10.2008, 14:24

Spiri
Ich glaube zum Thema Umlaute in Dateinamen hab ich dir glaub ich schon mal was gedichtet, oder irre ich mich da?

4

14.10.2008, 14:40

Zusätzlich zu dem bereits Gesagten:
  • Konstruktoren wären vielleicht etwas, dann braucht man keine hässlichen und wenig aussagenden Funktionen wie Klasse_Rohstoffe bzw. Klasse_Spieler. Dann kann man auch Initialisierungslisten statt Zuweisungen benutzen.
  • Was bringen Funktionen, die int als Rückgabewert haben und in jedem Falle 0 zurückgeben? Dafür gibt es void.
  • In Header sollte man keine weiteren Header einbinden, die man dort nicht benötigt (iostream).
  • Deine Klasse wird früher oder später Zugriff auf die Member unterstützen müssen, dazu werden Get- und Set-Methoden angebracht.

Zitat von »"drakon"«

Also mein Tipp: Buch nochmal genau durchlesen.
Würd ich auch meinen.

5

14.10.2008, 20:14

warum erstellt du instanzen benutzt sie aber nicht?
warum übergibst du den funktionen Klasse_Spieler und Klasse_Rohstoffe nicht deklarierte variablennamen?

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

6

15.10.2008, 17:46

C-/C++-Quelltext

1
int Klasse_Spieler (float Staerke, float Energie); 


ähm um deine Klasse zu instanzieren kannst du auch den C´tor nehmen,
dieser wird beim erzeugen deiner Instanz auf deiner Klasse aufgerufen und hat den selben Namen wie deine Klasse.

C-/C++-Quelltext

1
Spieler(float fStrengh,float fEnergy):m_fStrengh(fStrengh),m_fEnergy(fEnergy);


zb ^^ sry hab grad wenig Zeit sonst hätt ichs ausführlicher beschrieben kann ja jemand anderes machen

€: BTW achte ein wenig auf deine Notation ..

7

16.10.2008, 00:06

Aber hey das steht ja nicht schon in den ersten drei Antworten was ihr (Bolle, Toa, usw.) schreibt ... nee ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

Toa

Alter Hase

Beiträge: 944

Beruf: Research associate

  • Private Nachricht senden

8

16.10.2008, 01:16

*hust* lass mich xD

Anonymous

unregistriert

9

16.10.2008, 08:32

Deviloper
Genau, lass sie, sie wollen doch nur spielen :lol:

Werbeanzeige