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

1

10.11.2011, 23:35

[Erledigt] Fehler/Problem: Eine Klasse in einer Funktion & Char Name [30] funktioniert nicht richtig

Sry, wenn ich ins falsche Thread gepostet habe. (weiß leider nicht, ob Projekte nur für öffentliche Projekte zählt)


Ich will jetzt mit dem Buch anhalten und mein WISSEN in einem kleinem Spiel testen.
Spiel:
Man erstellt ein Charakter mit Name, Leben, HP, etc.
Mit diesem Charakter kann man arbeiten, schlafen kämpfen etc.
Diese Aktionen kann man aber nur um bestimmte Uhrzeiten machen (außer schlafen).
Alles hat gut geklappt bis ich zur Aktion "Kämpfen" kam.


Ich habe gerade folgendes Problem:

Ich habe eine Klasse Gegner mit einer .hpp Datei, die ich sowohl in der Main mit #include eingeführt habe, als auch in der .cpp Datei von der Klasse Gegner. (siehe Bild)

(Link)

Jetzt will ich eine Funktion in der Klasse Spieler erstellen, die
1. Abfragt, welches Level der Gegner haben soll.
2. Die Zeit um die jeweilige Dauer des Kampfes umstellt
3. Sag, ob der Gegner besiegt wurde oder, ob man verloren hat.

Doch anscheind, kann ich nicht auf die Klasse Gegner zugreifen.
Fehlermeldung:

Zitat

1>------ Erstellen gestartet: Projekt: Live_Game, Konfiguration: Debug Win32 ------
1>Kompilieren...
1>Gegner.cpp
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C2628: 'Gegner' gefolgt von 'unsigned' unzulässig (Semikolon ';' vergessen?)
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C2628: 'Gegner' gefolgt von 'int' unzulässig (Semikolon ';' vergessen?)
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C2347: '__w64': Kann nicht mit Typ '__w64 Gegner' verwendet werden
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\codeanalysis\sourceannotations.h(19) : error C2371: 'size_t': Neudefinition; unterschiedliche Basistypen
1> c:\users\runranger\documents\visual studio 2008\projects\live_game\predefined c++ types (compiler internal)(19): Siehe Deklaration von 'size_t'
1>Main.cpp
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\spieler.hpp(20) : error C2061: Syntaxfehler: Bezeichner 'Gegner'
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\main.cpp(80) : error C2275: 'Gegner': Ungültige Verwendung dieses Typs als Ausdruck
1> c:\users\runranger\documents\visual studio 2008\projects\live_game\gegner.hpp(2): Siehe Deklaration von 'Gegner'
1>Spieler.cpp
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\spieler.hpp(20) : error C2061: Syntaxfehler: Bezeichner 'Gegner'
1>Tätigkeiten.cpp
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\spieler.hpp(20) : error C2061: Syntaxfehler: Bezeichner 'Gegner'
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\tätigkeiten.cpp(57) : error C2143: Syntaxfehler: Es fehlt ')' vor ';'
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\tätigkeiten.cpp(57) : error C2761: 'void Spieler::Kämpfen(int)': Die erneute Deklaration der Memberfunktion ist unzulässig
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\tätigkeiten.cpp(57) : error C2059: Syntaxfehler: ')'
1>c:\users\runranger\documents\visual studio 2008\projects\live_game\tätigkeiten.cpp(58) : error C2470: "pZeit": Sieht wie eine Funktionsdefinition aus, es ist aber keine Parameterliste vorhanden; sichtbarer Funktionstext wird übersprungen.
1>Code wird generiert...
1>Das Buildprotokoll wurde unter "file://c:\Users\RunRanger\Documents\Visual Studio 2008\Projects\Live_Game\Debug\BuildLog.htm" gespeichert.
1>Live_Game - 12 Fehler, 0 Warnung(en)
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========

Kann mir jemand helfen? (Falls das Problem noch etwas zu unklar erklärt wurde, bitte schreiben, was undeutlich war, damit ich es näher erklären kann.







Codes:
Gegner.hpp:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
class Gegner
{
    private:
        int Geg_LVL;
        int Geg_HP;
        int Geg_DMG;

    public:
        Gegner (int Level);
        ~Gegner ();
}



Gegner.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include "Gegner.hpp"
#include <iostream>

using namespace std;

Gegner:: ~Gegner ()
{
    cout << "Gegner wurde zerstört!" << endl;
}

Gegner::Gegner (int Level)
{
    Geg_LVL = Level;
    Geg_HP = Level * 5;
    Geg_DMG = Level * 2;

    if (Level == 1)
    {
        cout << "Du kämpfst gegen ein Eichhörnchen (Level 1)." << endl;
    }
    else if (Level == 2)
    {
        cout << "Du kämpfst gegen eine Killerraupe (Level 2)." << endl;
    }
    else if (Level ==3)
    {
        cout << "Du kämpfst gegen einen Golem (Level 3). " << endl;
    }
    else if (Level == 4)
    {
        cout << "Du kämpfst gegen einen Zauberer (Level 4)." << endl;
    }
    else if (Level == 5)
    {
        cout << "Du kämpfst gegen einen Ork (Level 5)." << endl;
    }
    else if (Level == 6)
    {
        cout << "Du kämpfst gegen einen Hexenmeister (level 6)." << endl;
    }
    else if (Level == 7)
    {
        cout << "Du kämpfst gegen Hydra (Level 7)." << endl;
    }
    else if (Level == 8)
    {
        cout << "Du kämpfst gegen einen Zerstörer (level 8)." << endl;
    }
    else if (Level == 9)
    {
        cout << "Du kämpfst gegen einen Drachen. (level 9)." << endl;
    }
    else if (Level == 10)
    {
        cout << "Du kämpfst gegen NICHTS!!!  (LEVEL 10!!!)." << endl;
    }
}



und die Tätigkeiten.cpp (nur die Funktion Kämpfen)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void Spieler::Kämpfen (int Gegner; int *pZeit)
{
    int Level;


    if (*pZeit >= 18 || *pZeit == 1)
    {
        *pZeit= *pZeit + 2;

        cout << "Gegen Welches Monsterstufe willst du kaempfen (1-10): ";
        cin >> Level;

        if (Level < 1 || Level > 10)
        {
            Level = 1;
            cout << "Ungültiges Level, du kämpfst gegen ein Level 1 Monster\n" << endl;
        }

        //Gegner erstellen

        Gegner Gegner1 (Level);
        //Monsterwahl:
    }
    else 
    {
        cout << "Du findest kein Gegner um die Uhrzeit." << endl;
    }

    cout <<"\n\n\n" << endl;

}
Programmiersprache: C++
Fortschritt: Grundkenntnissse

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »RunRanger« (12.11.2011, 00:11)


2

11.11.2011, 00:34

Also auf jedenfall sollte bei deiner Klasse in der Datei Gegner.hpp eine Semikolon nach der abschließenden Klammer folgen.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class Gegner 
{     
private:         int Geg_LVL; 
        int Geg_HP; 
        int Geg_DMG;      
public: 
        Gegner (int Level);
 ~Gegner (); };



Und deine Funktion Kämpfen hat ein Semikolon in der Parameterliste, tausch das mal gegen ein Komma aus.

C-/C++-Quelltext

1
void Spieler::Kämpfen (int Gegner, int *pZeit)


Edit: Irgendwie krieg ich die Codeformatierung nicht hin, naja egal.

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

3

11.11.2011, 10:20

Zitat

error C2628: 'Gegner' gefolgt von 'unsigned' unzulässig (Semikolon ';' vergessen?)

vorallem steht das ja im Error Log und wenn du normalerweise auf die Meldung klickst, sollte VS auch an die Stelle springen wo der Fehler auftritt.

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

4

11.11.2011, 12:24

Ich glaube ich hatte mal das gleiche problem.
Versuch mal in der spieler.h einfach eine instanze von gegner zu deklarieren.
Es Mann dein dass die klasse spieler nicht weiß dass es die klasse gegner gibt,
deshalb Versuch das einfach ma.
Vll klappts :p
Ansonsten schreib ma das ergebnis vom tip meines vorredners.
Vll klappts ja so schon

ProAmateur
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

11.11.2011, 13:41

Versuch mal in der spieler.h einfach eine instanze von gegner zu deklarieren.
Es Mann dein dass die klasse spieler nicht weiß dass es die klasse gegner gibt,
deshalb Versuch das einfach ma.

Äh was? Wieso sollte er in diesem Fall eine Instanz deklarieren? Wie deklariert man überhaupt eine Instanz, kann man die nicht eh nur definieren, bzw. konstruieren?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

6

11.11.2011, 13:53

K, Vielen dank für die Antworten.

Ergebnis:
Fehler verbessert: Es sind nur noch 3 Fehler vorhanden:
§1>------ Erstellen gestartet: Projekt: Live_Game, Konfiguration: Debug Win32 ------ 1>Kompilieren... 1>Main.cpp 1>c:\users\runranger\documents\visual studio 2008\projects\live_game\main.cpp(80) : error C2275: 'Gegner': Ungültige Verwendung dieses Typs als Ausdruck 1> c:\users\runranger\documents\visual studio 2008\projects\live_game\gegner.hpp(2): Siehe Deklaration von 'Gegner' 1>Tätigkeiten.cpp 1>c:\users\runranger\documents\visual studio 2008\projects\live_game\tätigkeiten.cpp(77) : error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 'Gegner1' 1>c:\users\runranger\documents\visual studio 2008\projects\live_game\tätigkeiten.cpp(77) : error C3861: "Gegner1": Bezeichner wurde nicht gefunden. 1>Code wird generiert... 1>Kompilieren... 1>Spieler.cpp 1>Code wird generiert... 1>Kompilieren... 1>Gegner.cpp 1>Code wird generiert... 1>Das Buildprotokoll wurde unter "file://c:\Users\RunRanger\Documents\Visual Studio 2008\Projects\Live_Game\Debug\BuildLog.htm" gespeichert. 1>Live_Game - 3 Fehler, 0 Warnung(en) ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== §


Der erste Fehler zeigt auf:
(Main.cpp)

C-/C++-Quelltext

1
                Spieler1.Kämpfen (Gegner, &Zeit);


Der zweite Fehler zeigt auf diese Zeile, doch den Fehler kann ich nicht erkennen:

C-/C++-Quelltext

1
        Gegner Gegner1 (Level);


Der dritte Fehler:
(Tätigkeiten.cpp in der Fuktion Spieler::Kämpfen (...);)

C-/C++-Quelltext

1
        Gegner Gegner1 (Level);



Bei allen drei Fehlern weiß ich leider nicht weiter. Die Klasse Gegner habe ich schon in die Spieler.hpp eingefügt, doch es kommen wiederrum die gleichen Fehler.

(der Char-Fehler, der in der Überschrift war, kommt nachher)
Programmiersprache: C++
Fortschritt: Grundkenntnissse

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

11.11.2011, 13:59

Ich würde Dir übrigens aus Gründen der Übersichtlichkeit an's Herz legen Variablen nicht mit einem Großbuchstaben zu beginnen und nicht so zu nennen wie Klassen.

PS:
Es müsste so heißen: "Du findest keinen Gegner um diese Uhrzeit."
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Saik0

Treue Seele

Beiträge: 171

Beruf: Anwendungsentwickler

  • Private Nachricht senden

8

11.11.2011, 14:05

C-/C++-Quelltext

1
void Spieler::Kämpfen (int Gegner, int *pZeit)


ich glaub der Fehler liegt in dieser Zeile. Du willst doch die Gegner Klasse an die Kämpfen Methode übergeben oder sehe ich das falsch? Deine Kämpfen Methode erwartet aber einen int und in der Kämpfen Methode besteht kein Bezug auf die Gegner Variable. Poste doch mal was der Compiler ausgibt.

ProAmateur

Alter Hase

Beiträge: 434

Wohnort: Bei Simmern, Koblenz

Beruf: Schüler

  • Private Nachricht senden

9

11.11.2011, 14:53

Sorry tut mir leid!
Meinte naturlich definieren :p
"Die Neugier steht immer an erster Stelle eines Problems, das gelöst werden will."
Galileo Galilei
________________________________________________________________________

"Dumme Fragen gibt es nicht, dumm ist nur, wer nicht fragt.“

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

11.11.2011, 17:32

Sorry tut mir leid!
Meinte naturlich definieren :p

Das klärt natürlich noch immer nicht wieso er das tun sollte und wieso Du glaubst, dass das den Fehler behebt. Eine Forward-Declaration kann ich mir ja z.B. als nützlich vorstellen, aber eine Instanz einer Klasse macht da irgendwie keinen Sinn.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige