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

KlonKeks

Frischling

  • »KlonKeks« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Essen

Beruf: Schülöer^^

  • Private Nachricht senden

1

01.07.2006, 16:20

Mh... Strings oder Char-Arrays in Klassen

Hallo,

Wenn ich Chars oder Strings (also die Dinger^^ aus #include <string>) innerhalb von klassen als Membervariblen benutze, gibt es probleme :o .

Bei Strings meckert der liebe Kompiler schon bei der Definition :
"
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 's_String'
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
"
:/

Bei char-array weis ich nicht so recht wie ich sie richtig als Membervariablen deklarieren kann und wie ich dann damit arbeite (wenn ich das versuche treten oft Fehler auf...)

wenn ich zum beispiel

char mName[20]; als Membervariable deklariere, dann ein Objekt der Klasse erzeuge (nennen wir das Objekt einfach mal Cat) und dann mName so definiere: Cat.mName = "Whiskat"; , kriege ich folgende Fehler: error C2440: '=': 'const char [8]' kann nicht in 'char [20]' konvertiert werden

Wie nutze ich Char / oder auch Strings richtig als Membervariablen?


PS : sorry wenn das ganze etwas lang und kompliziert geschrieben ist :)

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

2

01.07.2006, 16:46

hast du beachtet, dass strings zum namespace std dazu gehören?

//
wenn du char-arrays nimmst müsstest du in deinem Beispiel entweder direkt im Construktor initialisieren

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
class Beispiel
{
public:
  Beispiel(): _text("Da is er")
  {}
  //...

private:
  char _text[20];
};

oder eben mit den entsprechenden Funktionen zuweisen.

KlonKeks

Frischling

  • »KlonKeks« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Essen

Beruf: Schülöer^^

  • Private Nachricht senden

3

01.07.2006, 17:07

danke schon mal für die antwort :)

wie kriege ich es hin, wenn ich zum beispiel eine Klasse "Person" erzeuge, und jede der Personen als Membervariable einen Namen hat (also zB char Name[20]), der auch unterschiedlich ist? Es wäre für mich schlecht, wenn das nicht möglich wäre :/

edit : oder kann ich vll aus deinem Beispiel den Inhalt des _Text durch eine Variable bestimmen die ich immer ändere :o ?
Deutschland wird Weltmeister :)

Kasenoru

Frischling

Beiträge: 79

Beruf: Softwareentwickler

  • Private Nachricht senden

4

01.07.2006, 17:35

Also erstmal ist folgendes von grek40:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
class Beispiel
{
public:
  Beispiel(): _text("Da is er") {};
  //...

private:
  char _text[20];
};


sowiso falsch, aber egal.

Zitat


Wenn ich Chars oder Strings (also die Dinger^^ aus #include <string>) innerhalb von klassen als Membervariblen benutze, gibt es probleme Surprised .

Bei Strings meckert der liebe Kompiler schon bei der Definition :
"
error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner 's_String'
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.


Joah, wie grek40 schon sagte, du solltest auch den entsprechenden Namespace angeben:

C-/C++-Quelltext

1
2
3
4
5
class CTest
{
public:
    std::string sName;
};

Zitat


wie kriege ich es hin, wenn ich zum beispiel eine Klasse "Person" erzeuge, und jede der Personen als Membervariable einen Namen hat (also zB char Name[20]), der auch unterschiedlich ist? Es wäre für mich schlecht, wenn das nicht möglich wäre :/

Hää????
Naja egal:

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
#include <iostream>

class CPerson
{
private:
    char* m_pcName;
public:
    CPerson(char* pcName) : m_pcName(pcName) {};
    CPerson() {}; 
    char* GetName() {return m_pcName;}
};

int main()
{
    CPerson Person1("Fred");
    CPerson Person2("Wolfgang");

    std::cout << "Person1 hat den Namen " << Person1.GetName() << std::endl;
    std::cout << "Person2 hat den Namen " << Person2.GetName() << std::endl;

    return 0;
}

so, ich hoffe das is das was du willst.

Mit Freundlichen Grüßen

Kasenoru

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

5

01.07.2006, 17:55

Kasenoru
Also diese letzte Lösung setzt aber voraus, dass pcName immer gültig bleibt, da in der Klasse lediglich ein Pointer existiert.

hab jetzt nochmal überprüft und geändert - zumindest mit strings hab ich nie Probleme (deswegen wusst ich auch nicht, wie es mit char-array geht^^)

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
#include <iostream>
#include <string>

class Person
    {
    public:
        Person(std::string name):
          _name2(name)
            {
            strcpy(_name1, "test"); // hier kann statt test nat. auch was anderes hin

            }
        ~Person(void)
            {
            }
        char* getName1(void)
            {
            return _name1;
            }
        std::string getName2(void)
            {
            return _name2;
            }
    private:
        char _name1[20];
        std::string _name2;
    };

int main()
    {
    Person irgendwer("Alex");
    std::cout << irgendwer.getName1() << ' ' << irgendwer.getName2();
    std::cin.get();
    return 0;
    }

KlonKeks

Frischling

  • »KlonKeks« ist der Autor dieses Themas

Beiträge: 3

Wohnort: Essen

Beruf: Schülöer^^

  • Private Nachricht senden

6

01.07.2006, 18:01

danke Kasenoru und grek^^
:idea:
Deutschland wird Weltmeister :)

7

19.03.2012, 22:15

Hallo ich habe ein ähnliches Problem wie der Threadsteller...

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

class monster
{
private:
    int energie;
    char name[30];

public:
    void energieänderung(monster *pmonster);
     monster();



};
monster::monster()
{
    energie=500;
    name[30]="Kaltus";//{'S','i','n','\0'}; // das will er nicht machen
}


Gibt es eine Möglichkeit einen char array im Konstruktor zu benutzen udn diesen zu definieren oder ist dies nur mit Strings möglich?

DeKugelschieber

Community-Fossil

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

8

19.03.2012, 22:39

Du kannst einen Zeiger auf ein char Array übergeben:

C-/C++-Quelltext

1
void funktion(char* name){member_name = name;}


Allerdings muss member_name dann auch ein Zeiger sein:

C-/C++-Quelltext

1
char* member_name; // in deiner Klasse


Ich weiß nicht was der Kompiler daraus macht, aber eigentlich benutzt man keine Umlaute und es könnte Probleme geben solltest du den Kompiler und/oder die Sprache wechseln:

C-/C++-Quelltext

1
void energieänderung(monster *pmonster);


lieber:

C-/C++-Quelltext

1
void energieaenderung(monster *pmonster);


Die beste Lösung für sowas sind übrigens einfach Strings (also #include <string>).

9

19.03.2012, 23:40

Gibt es eine Möglichkeit einen char array im Konstruktor zu benutzen udn diesen zu definieren oder ist dies nur mit Strings möglich?

Nenn mir EINEN Grund, warum du char arrays benutzen möchtest? Nimm strings und werde glücklich. ;-)
Lieber dumm fragen, als dumm bleiben!

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

19.03.2012, 23:47

Der Grund ist vermutlich dass viel zu viele C++ Bücher viel zu früh mit sowas anfangen;) Anstatt einfach direkt Strings zu zeigen wird viel zu viel damit rumhantiert.
„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.“

Werbeanzeige