Aktuelle Zeit: 22.12.2024, 19:49

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: C::B und gcc
BeitragVerfasst: 18.03.2008, 16:05 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
hallo leute, ich wollte heute mal wieder ein bischen programmieren und wollte ein konstantes array definieren, allerdings fingen da schon die probleme an.
ich weis zwar wie man konstanten deklariert und definiert, aber wie macht man dies bei einer klasse, denn C::B meckert wenn ich eine konstanate im private bereich anlege.
hier einfach mal der code den ich versucht habe:

Code:
class class1
{
private:
    const char m_Varname[] = { "Str1", "Str2", "Str3"};
};


und hier mal die fehler:
Zitat:
C:\Kopie von SDL Test\menu.h|20|error: a brace-enclosed initializer is not allowed here before '{' token|
C:\Kopie von SDL Test\menu.h|20|error: ISO C++ forbids initialization of member `m_MENU_STRINGS'|
C:\Kopie von SDL Test\menu.h|20|error: making `m_MENU_STRINGS' static|
C:\Kopie von SDL Test\menu.h|20|error: invalid in-class initialization of static data member of non-integral type `char[0u]'|
C:\Kopie von SDL Test\menu.cpp||In constructor `CMenu::CMenu(SDL_Surface*)':|
C:\Kopie von SDL Test\menu.cpp|9|warning: left-hand operand of comma has no effect|
C:\Kopie von SDL Test\menu.cpp|9|error: invalid conversion from `int' to `TTF_Font*'|
C:\Kopie von SDL Test\menu.cpp|18|error: `CMEnu' has not been declared|
C:\Kopie von SDL Test\menu.cpp||In function `int RUN()':|
C:\Kopie von SDL Test\menu.cpp|20|error: invalid use of `this' in non-member function|
C:\Kopie von SDL Test\menu.cpp|22|error: `this' cannot appear in a constant-expression|
C:\Kopie von SDL Test\menu.cpp|22|error: '->' cannot appear in a constant-expression|
C:\Kopie von SDL Test\menu.cpp|29|error: prototype for `void CMenu::drawText(char*, int, int)' does not match any in class `CMenu'|
C:\Kopie von SDL Test\menu.h|26|error: candidate is: void CMenu::drawText(SDL_Surface*, char*, int, int)|
C:\Kopie von SDL Test\menu.cpp||In member function `void CMenu::SetFontColor(int, int, int)':|
C:\Kopie von SDL Test\menu.cpp|38|error: expected primary-expression before '{' token|
C:\Kopie von SDL Test\menu.cpp|38|error: expected `;' before '{' token|
||=== Build finished: 13 errors, 1 warnings ===|


Zuletzt geändert von psyco001 am 18.03.2008, 16:11, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 18.03.2008, 16:11 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
.h:
Code:
class class1
{
private:
    const char m_Varname[3];
};

.cpp:
Code:
const char class1::m_Varname[3] = { "Str1", "Str2", "Str3"}

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 18.03.2008, 16:26 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
dabei meckert er "is not a static member of"


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 18.03.2008, 20:53 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Ooops. Hab tatsächlich das static vergessen.
in der Deklaration muss es "static const char m_Varname[3];" heißen.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 18.03.2008, 23:06 
Offline
Moderator

Registriert: 25.02.2007, 14:35
Beiträge: 323
Wohnort: Münster
static-Variablen gibt es praktisch nur ein mal pro Klasse (nicht pro Objekt, sondern pro Klasse). Das ist auch sinnvoll, denn ein konstater Wert ändert sich ja nicht - warum sollte er dann auch für jede Klasse extra existieren wenn er immer gleich ist?

Das gilt auch im Umkehrschluss: Du kannst keine konstanten Variablen in Klassen definieren, ohne sie statisch zu machen, denn du kannst die Deklaration von Membervariablen nur im Konstruktor vornehmen, und da existiert die Variable ja bereits und müsste dann geändert werden.


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 19.03.2008, 13:02 
Offline

Registriert: 17.11.2007, 11:15
Beiträge: 19
Das kann doch gar nicht funktionieren.
Code:
char text[] = "abc"; //das ist ein char-Array
char textarray[][] = {"abc", "def", "123"}; //das ist ein char-"Array-Array"

Oder irre ich mich jetzt?


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 19.03.2008, 13:47 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Argh. Das passiert, wenn man einfach mal ne Antwort schreibt, ohne darüber nachzudenken -.-
Ich würde da "const char *textarray[];" benutzen.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: C::B und gcc
BeitragVerfasst: 19.03.2008, 14:40 
Offline
Newsposter
Benutzeravatar

Registriert: 12.03.2007, 10:42
Beiträge: 338
Wohnort: Berlin
naja ich hab mir jetzt einfach ne definition geschrieben wie gross das array sein soll und dann einfach das array entsprechend gefüllt.


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de