Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » [Problem *g*] Verwendung von "const"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
05.06.2004, 15:35 Uhr
DerSchwarzeSchlumpf



Hi

Bin gerade beim Debuggen von nem Programm und bin gerade dabei, alles durch "Hartcodierte Werte" zu ersetzen. dH ich muss überall die "Abfragewerte" in eine Klasse kapseln und darf dann nur diese verwenden.

Das Problem: "const" soll auf jedem Fall "define" vorgezogen werden.

Bei bools, int und chars ist es ja kein Problem da schreib ich einfach


C++:
const bool FREE_CELL_VALUE = true;



und greife dann bei den abfragen so darauf so


C++:
if(variable == Klasse::FREE_CELL_VALUE)
  bla bla



das Problem ist aber: wie kann ich das mit einem string oder char* machen?

beispiel:
derzeit habe ich stehen

C++:
if(strcmp(user_eingabe == "exit") == 0)
  cout << "du willst aussteigen? aha!" << endl;



nur sollte ich das exit jetzt auch mit so einem "const" auslagern aber ich hab keine ahnung wie das funktioniert *g* weil


C++:
const char* COMAND_EXIT = "exit"



geht irgendwie nicht *g*

wär über tipps echt dankbar (:

lg chris
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.06.2004, 15:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


hmm der sinn ein const bool zu definieren will mir nicht so ganz einleuchten aber sei es drum...

strcmp erwartet zwei char*paramter... wenn der rückgabewert 0 ist dann sind die inhalte auf die die 2 paremter gezeigt haben gleich...

C++:
if(!strcmp(user_eingabe,"exit")){....


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 05.06.2004 um 15:48 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.06.2004, 15:55 Uhr
0xdeadbeef
Gott
(Operator)



C++:
const char * const HALLO = "Welt";


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.06.2004, 15:57 Uhr
DerSchwarzeSchlumpf




Zitat:
DerSchwarzeSchlumpf postete
Hi

Bin gerade beim Debuggen von nem Programm und bin gerade dabei, alles durch "Hartcodierte Werte" zu ersetzen. dH ich muss überall die "Abfragewerte" in eine Klasse kapseln und darf dann nur diese verwenden.

Das Problem: "const" soll auf jedem Fall "define" vorgezogen werden.

Bei bools, int und chars ist es ja kein Problem da schreib ich einfach


C++:
const bool FREE_CELL_VALUE = true;



und greife dann bei den abfragen so darauf so


C++:
if(variable == Klasse::FREE_CELL_VALUE)
  bla bla



das Problem ist aber: wie kann ich das mit einem string oder char* machen?

beispiel:
derzeit habe ich stehen

C++:
if(strcmp(user_eingabe == "exit") == 0)
  cout << "du willst aussteigen? aha!" << endl;



nur sollte ich das exit jetzt auch mit so einem "const" auslagern aber ich hab keine ahnung wie das funktioniert *g* weil


C++:
const char* COMAND_EXIT = "exit"



geht irgendwie nicht *g*

wär über tipps echt dankbar (:

lg chris



ja das is mir schon klar *g* user_comand + "exit" sind ja bei mir (laut meinem verständnis *g*) 2 chars. nur darf ich hier laut dem coding standard an den ich mich halten muss nicht ein strcmp auf "exit" durchführen sondern nur auf
LabyrinthManager::COMAND_FOR_EXIT
dH ich muss in der Klasse LabyrinthManager eine hardcodierte Variable "COMAND_FOR_EXIT" speichern die den Wert "exit" hat *g* nur das funktioniert bei mir nicht weil ich nicht weiß wie ich einen const char* definiere *g*

ps: des mit dem const bool ist nur ein Beispiel weil ich das Labyrinth als Bool-Matrix speicher (true für freie zelle, false für mauer, aber da auch nicht auf "true", "false" abfragen darf sondern wieder so hardcodierte Werte IDENDIFICATION_WALL udgl verwenden muss *g*)

hoff dass ich mich einigermaßen klar ausgedrückt habe *g*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.06.2004, 15:58 Uhr
DerSchwarzeSchlumpf




Zitat:
0xdeadbeef postete

C++:
const char * const HALLO = "Welt";




bekomm da leider eine Fehlermeldung

...\labyrinth_manager.h(49): error C2864: 'INPUT_SAVE_PATH' : only const static integral data members can be initialized inside a class or struct


in der Klasse LabyrinthManager steht:

C++:
    static const char* const INPUT_SAVE_PATH = "save-path";



und dann greif ich so darauf zu:

C++:
  if(strcmp(comand_input, LabyrinthManager::INPUT_SAVE_PATH) == 0)


Dieser Post wurde am 05.06.2004 um 16:04 Uhr von DerSchwarzeSchlumpf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
05.06.2004, 16:05 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


mach die zuweisung im konstruktor...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.06.2004, 16:15 Uhr
DerSchwarzeSchlumpf



hehe auf die idee wär ich nicht gekommen

funktioniert super danke (:


der konstruktor

C++:
LabyrinthManager::LabyrinthManager()
{
  run_programm_ = true;
  INPUT_SAVE_PATH = new char [10+1];
  INPUT_SAVE_PATH = "save-path";
}



und im header

C++:
    static const char* INPUT_SAVE_PATH;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.06.2004, 16:20 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


au nein blos nicht so... erst allokierst du speicher und danach weisst du das auf einen neuen konstanten speicherblock zu...
lass entweder das new weg oder nutze z.b. sprintf um den spass in dein char-array zu packen... wobei wenn du sowieso c++ nimmst könntest du auch gleich ein std::string nehmen statt dich mit char-arrays rumzuärgern...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.06.2004, 16:41 Uhr
DerSchwarzeSchlumpf




Zitat:
Windalf postete
au nein blos nicht so... erst allokierst du speicher und danach weisst du das auf einen neuen konstanten speicherblock zu...
lass entweder das new weg oder nutze z.b. sprintf um den spass in dein char-array zu packen... wobei wenn du sowieso c++ nimmst könntest du auch gleich ein std::string nehmen statt dich mit char-arrays rumzuärgern...



uh danke für den tipp *g* hab gedacht wenn ich "exit" zB dem COMAND_EXIT zuweis, muss ich da zuerst speicher allokieren... .

hmm des mit string hab ich mir auch schon überlegt aber dann müsste ich alle strcmp wieder umändern weil das funktioniert ja nicht zwischen char* und string, oder?

ich glaub ich werd einfach das new weg lassen *g* danke jedenfalls (:
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
05.06.2004, 16:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also das tolle bei std::strings ist unter anderem ja das du nicht mehr strcmp brauchst sondern direkt mittels = vergleichen kannst...

wenn du trotzdem strcmp verwenden willst einfach die mehtode c_str() vom std::string aufrufen dann geht das wieder
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: