[C++]Een variabele naar een enum schrijven

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 16:32
Hoi

Ik wil vanuit een bestand een waarde kunnen lezen, die waarde opslaan in een variabele en de waarde dan als een enum gebruiken.

Dit heb ik er van gemaakt, maar blijkbaar werkt het niet.

Bestand:
Car1=MODEL_AUDI

Code:
code:
1
2
3
4
5
6
7
8
9
10
11
std::map<std::string, eModel> strToEnum;

char Car1[128];

GetPrivateProfileString("AddedCars","Car1",NULL,Car1,512,"./TrafficLoad.ini");

if (condities){
eModel Car1M;
Car1M = strToEnum[Car1];
RequestModel(Car1M);
}


De waarde van Car1 leest het script goed, maar Car1M is niet MODEL_AUDI geworden.
De functie RequestModel ziet er werkend zo uit:
RequestModel(MODEL_AUDI);

Ik heb werkelijkwaar geen idee wat ik fout aan het doen ben :+

Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Hoe vul je strToEnum? Werkt het wel als je zoiets doet:
C++:
1
Car1M = strToEnum["MODEL_AUDI"];

Het probleem is dat je code meerdere dingen doet (waarde inlezen en opzoeken). Probeer het probleem eerst te localiseren.

Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Check: Je zoet de Car1 key in de [AddedCars] section, maar heb je wel een [AddedCars] section?
Harde fout: regel 3 definieert een buffer van 128 chars, maar in regel 5 claim je dat die buffer opeens 512 chars groot is.
Schoonheidsfoutje: regel 8 heeft een ongeinitialiseerde variabele. Netter: "eModel Car1M = strToEnum[Car1];"

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • ikt
  • Registratie: Juli 2008
  • Laatst online: 16:32
MSalters: Dankje voor de foutjes, maken de code weer wat netter en overzichtelijker. :) In het bestand zijn de benodigde gegevens aanwezig en Car1 geeft als waarde "MODEL_AUDI", dus dat is goed.

JanDM: Ik heb het geprobeerd en volgens mij zit daar het probleem. Er komt dan namelijk dit te staan:
code:
1
RequestModel("MODEL_AUDI")

Dit kan niet, want de functie leest alleen een enum. Zo zou het eruit moeten komen:
code:
1
RequestModel(MODEL_AUDI)

Geen string dus. Slordig van mij, maar dan heb ik een ander probleem: srtToEnum moet dus een ongedefinieerde uitkomst geven! Geen string, alleen MODEL_AUDI.

Acties:
  • 0 Henk 'm!

  • Styxxy
  • Registratie: Augustus 2009
  • Laatst online: 20-09 19:45
Je wilt dus gewoon een "string to enum" conversie doen? Op Google zijn daar erg veel resultaten over te vinden. Ik ben geen expert op C++ vlak, maar op deze pagina lijkt mij een goede oplossing aangeboden te zijn.

Acties:
  • 0 Henk 'm!

  • H!GHGuY
  • Registratie: December 2002
  • Niet online

H!GHGuY

Try and take over the world...

Lees ook even de documentatie van std::map na.
Er gebeurt namelijk iets ongewenst als je MODEL_WHATEVER in je ini file zet...

ASSUME makes an ASS out of U and ME


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Valt wel mee. Mits je natuurlijk je enum begonnen bent met MODEL_UNKNOWN=0

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
Ik vermoed overigens dat de TS simpelweg vergeten is StrToEnum te vullen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


Acties:
  • 0 Henk 'm!

  • epic007
  • Registratie: Februari 2004
  • Laatst online: 25-08 11:27
Zit het probleem niet in het gebruik van je map ?

C++:
1
2
3
4
5
6
7
8
9
10
std::map<std::string, eModel> strToEnum;

std::string aString;
char aFixedArray[128];

// strToEnum verwacht een std::string
strToEnum[aString];

// maar je geeft hem een array van char
strToEnum[aFixedArray];

Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
Alsje dit toch al in het register opslaat waarom sla je het niet op als een int dan hoef je namelijk alleen maar naar je enum type te casten.

[ Voor 66% gewijzigd door NC83 op 31-08-2011 12:06 ]

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 13-09 00:05
epic007 schreef op woensdag 31 augustus 2011 @ 11:13:
Zit het probleem niet in het gebruik van je map ?

strToEnum verwacht een std::string maar je geeft hem een array van char
Een char[] decayed naar een char const*, en std::string::string accepteert een char const*. Hoe anders zou std::string S = "Hello, world\n"; moeten werken?

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

ikt schreef op maandag 29 augustus 2011 @ 16:00:
JanDM: Ik heb het geprobeerd en volgens mij zit daar het probleem. Er komt dan namelijk dit te staan:
code:
1
RequestModel("MODEL_AUDI")
Nee, hij zei strToEnum["MODEL_AUDI"]. Oftewel, hij vraagt of het ook werkt als je dat hele GetPrivateProfileString() weglaat en gewoon "MODEL_AUDI" als Car neemt.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1