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

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

1

26.11.2011, 03:43

char Name im Konstruktor einer Klasse

Hey,
ich suche seit Stunden vergeblich nach einem Fehler in meiner Klasse.
Ich würde gerne im Konstruktor meinem Spieler direkt einen Namen verpassen
doch leider komm ich gerade mit der Syntax nicht klar.
Es währe echt nett wenn mir da jemand mal auf die Sprünge helfen könnte.

CSpieler.hpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// #############################
//  Headerdatei: CSpieler
// #############################

class CSpieler
{
    private:
        // Membervariablen
        char m_Name[10];
        int m_Life;
        int m_Damage;
        int m_Defense;
        int m_Stamina;

    public:
        // Memberfunktionen
        CSpieler (int Life, int Damage, int Defense, int Stamina);
};



CSpieler.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// #############################
//  Quelldatei: CSpieler
// #############################

#include "CSpieler.hpp"


// Konstruktor
CSpieler::CSpieler (int Life, int Damage, int Defense, int Stamina)
{
    // Spielerstats setzen
    m_Name[10] = ("Kevin"); // <---- Hier sollte der fehler wohl sein :/
    m_Life = Life;
    m_Damage = Damage;
    m_Defense = Defense;
    m_Stamina = Stamina;
}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

26.11.2011, 04:20

Arrays kann man nicht zuweisen. Dazu müsstest du strcpy benutzen.
Benutze aber stattdessen lieber std::string. Das erspart dir Ärger.

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

3

26.11.2011, 04:53

Oki benutze einfach ein externen String außerhalb der klasse.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

26.11.2011, 10:45

Öh, wie? Was meinst Du mit "externer String"?

David meinte das:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
CSpieler::CSpieler (int Life, int Damage, int Defense, int Stamina, std::string name)
{
    // Spielerstats setzen
    m_Name = name;


...

new CSpieler( 100, 20, 20, "foobar");
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]

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

5

26.11.2011, 11:20

Achso ne ich habe einfach in meiner main.cpp einen eigenen string gemacht also Spieler_Name und habe sie hat benannt aber nicht die Beste Lösung.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

26.11.2011, 11:44

Ja, das ist sogar eine sehr sehr schlechte Lösung.
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]

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

7

26.11.2011, 12:09

Dann hau den Namen doch einfach wieder in die Klasse für den Spieler. Macht doch mehr Sinn und den Code dafür hast du ja schon;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

8

26.11.2011, 12:35

Ja das stimmt aber jetzt habe ich so ein ähnliches Problem und wollte dafür nicht extra ein extra Theard öffnen.
Ich wollte eine art Highscore für meine Dart scheibe proggn bis mir aufgefallen ist das irgendwie die Namen in meiner verketteten liste überschreiben.
Ich finde eigentlich keinen Fehler oder gibt es bei char Verwendung mi verketteten listen eine Besonderheit?

Wenn ich ein Name eintrage und die liste aufrufe funktioniert es einwandfrei.
Doch sobald ich ein zweiten Name eintrage wird der erste mit überschrieben :/.

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
58
59
60
61
62
63
// #############################
//  Name: Dart Highscore
// #############################

#include <iostream>
#include <list>

using namespace std;

int main ()
{
    // Variablen
    int Eingabe_int = NULL;
    char Eingabe_char[16];
    list<char*> lNamen;
    list<char*>::iterator i;
    int Anzahl = 1;

    do
    {
        system ("cls");
        cout << "_____ Dart Highscore ______" << endl;
        cout << " 1. Score eintragen" << endl;
        cout << " 2. Highscore anzeigen" << endl;
        cout << " 0. Beenden" << endl;
        cout << "---------------------------" << endl;
        cout << "Eingabe: ";
        cin >> Eingabe_int;

        switch (Eingabe_int)
        {
            // Score eintragen
            case 1:
            {
                // Score abfragen
                system ("cls");
                cout << "_____ Score eintragen _____" << endl;
                cout << "Name: ";
                cin.ignore ();
                cin.get (Eingabe_char, 15);

                // Score in die liste schieben
                lNamen.push_back (Eingabe_char);
            } break;

            // Highscore anzeigen
            case 2:
            {
                // Score auflisten
                system ("cls");
                cout << "_____ Score anzeigen _____" << endl;
                for (i=lNamen.begin(); i!=lNamen.end(); i++)
                {
                    cout << " " << Anzahl << ". " << (*i) << endl;
                }
                cout << endl;
                system ("pause");
            } break;
        }
    } while (Eingabe_int != 0);

    return 0;
}

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

9

26.11.2011, 14:47

Ich glaube, du hast die Sache mit den Zeigern noch nicht richtig verstanden.
Alle deine Zeiger zeigen auf denselben Speicher, nämlich auf Eingabe_char[16].

Raidenkk

Treue Seele

  • »Raidenkk« ist der Autor dieses Themas

Beiträge: 151

Wohnort: Bergkamen/Oberaden

Beruf: Multimedia Informatik

  • Private Nachricht senden

10

26.11.2011, 15:13

Ich werde mir nochmal das Buch in die Hand nehmen und das Kapitel mit den Zeigern durchlesen.

Werbeanzeige