char* von if nicht erkannt
-
Du kannst ein
char *nicht mit==vergleichen! Du musst stattdessen mit strcmp arbeiten:
http://www.cplusplus.com/reference/clibrary/cstring/strcmp.htmlOder du machst es dir einfacher und wählst den in C++ üblichen weg, d.h. du benutzt anstatt
char *std::string.
Dann kannst du auch wieder mit==arbeiten und sparst dir eine menge Ärger...
-
ok, danke
-
So, ich habs jetzt ma so gemacht:
Header:
//... void einfuegen (string *, koord* ); //...Implementierung:
void einfuegen (string * a, koord* koords) { int qqq=0; if (*a == "Frankfurt" || *a == "EDDF" || *a == "eddf" || *a == "FRA" || *a == "fra" || *a == "frankfurt" || *a == "FRANKFURT") { *a = "Frankfurt"; koords->lg=50;koords->lm=1;koords->lae='N';koords->bg=8; koords->bm=32;koords->bre='O';koords->ls=35;koords->bs=35; } //usw }Ich bekomme die folgende Fehlermeldung (im Header )
eigen.h: variable or field `einfuegen' declared void eigen.h:`string' was not declared in this scope (Hauptprog)haupt.cpp:`einfuegen' cannot be used as a functionIch habe den Header cstring eingebunden.
mfg,
Tim
-
Du brauchst <string>
und dann wird ein string mit std::string deklariert
-
geht net, ich bekomme die gleiche Fehlermeldung wie oben.
-
Bist du sicher, dass du
<string>zuvor inkludiert hast und den Namensraum angibst? Gib doch nochmals den jetzigen Code und die passende Fehlermeldung an.Ausserdem würde ich den
std::stringeher als Const-Referenz als als Zeiger übergeben.
-
ok, danke, das klappt soweit wieder, ich bekomme keine fehlermeldung.
allerding wird mein der funktion übergebener Flughafen wieder nicht erkannt.
ich hab einfach std:: davorgesetzt.Header:
//... void einfuegen (std::string *, koord* ); //...Implementierung:
//... void einfuegen (std::string * a, koord* koords) { int qqq=0; if (*a == "Frankfurt" || *a == "EDDF" || *a == "eddf" || *a == "FRA" || *a == "fra" || *a == "frankfurt" || *a == "FRANKFURT") { *a = "Frankfurt"; koords->lg=50;koords->lm=1;koords->lae='N';koords->bg=8; koords->bm=32;koords->bre='O';koords->ls=35;koords->bs=35; } //... }Funktionsaufruf mit
einfuegen ( &start, &koords );start ist ein vorher eingegebener string.
Mein if erkennt wieder "Frankfurt" nicht und ich komme zum else-block.
mfg
Tim
-
Warum machst du das da überhaupt mit Zeigern? - Du kannst ja auch einen normalen (ev. const) string übergeben. Ist üblicher, als da etwas mit Zeiger zu machen. Vor allem ist der Aufruf auch intuitiver.
Der gegebene Code sollte allerdings funktionieren. Also wird etwas beim Aufruf schief gehen.
-
ok. ich habs jetzt nochma mit einer const std::string & probiert.
Header:
//... void einfuegen (const std::string &, koord* ); //...Implementierung:
//... void einfuegen (const std::string & a, koord* koords) { int qqq=0; if (a == "Frankfurt" || a == "EDDF" || a == "eddf" || a == "FRA" || a == "fra" ||a == "frankfurt" || a == "FRANKFURT") { a = "Frankfurt"; koords->lg=50;koords->lm=1;koords->lae='N';koords->bg=8; koords->bm=32;koords->bre='O';koords->ls=35;koords->bs=35; } //... }Aufruf mit:
einfuegen ( rstart, &koords );rstart ist:
const string & rstart=start;Leider bekomme ich jetzt folgende Fehlermeldung:
passing `const std::string' as `this' argument of `std::basic_string<_CharT, _Traits, _Alloc>& std::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]' discards qualifiersund zwar genauso oft, wie ich
a = "Frankfurt";verwendet habe. Hier liegt auch die Fehlerzeile.
Jetzt blick ich überhaupt nicht mehr durch.
mfg
Tim
-
an drakon:
ich mach des ganze mit zeigern, weil ich den wert ändern will, so dass, wenn man z.B. frankfurt eingibt, die Funktion die richtige Rechtschreibung einsetzt.
mfg
Tim
-
const paßt leider vorläufig nicht zu deinem entwurf.
-
Tim1995 schrieb:
ich mach des ganze mit zeigern, weil ich den wert ändern will, so dass, wenn man z.B. frankfurt eingibt, die Funktion die richtige Rechtschreibung einsetzt.
Dafür kannst du auch (Non-Const-)Referenzen einsetzen.
-
OK.
Ich hab des const weggemacht.
Das if erkennt immer noch nicht FRA.
Vielleicht ist die Eingabe irgendwie net ok ?
ich mach das so:
cin >> start; einfuegen ( rstart, &koords );mfg
Tim

-
Tim1995 schrieb:
Vielleicht ist die Eingabe irgendwie net ok ?
ich mach das so:cin >> start; einfuegen ( rstart, &koords );dein erkennungscode ist ok.
aber warum tust du start einlesen und rstart übergeben?
wenn es wirklich start und rstart geben soll, dann entweder
cin >> start; string rstart=start; einfuegen ( rstart, &koords );oder besser
cin >> start; string rstart=einfuegen ( rstart, &koords );aber super hübsch isses noch net, weil du dummerweise 2 rückgabewerte hast.
perfekt wäre ne struktur aus name und koordinaten, glaub ich.
-
OK. Nach Idee von volkard ganz neue Art.
Sie klappt!!!! Endlich!!!Header:
//... koord einfuegen ( koord ); //...Implementierung:
koord einfuegen (koord koords) { int qqq=0; koord rueck; if (koords.name == "Frankfurt" || koords.name == "EDDF" || koords.name == "eddf" || koords.name == "FRA" || koords.name == "fra" || koords.name == "frankfurt" || koords.name == "FRANKFURT") { rueck.name = "Frankfurt"; rueck.lg=50;rueck.lm=1;rueck.lae='N';rueck.bg=8; rueck.bm=32;rueck.bre='O';rueck.ls=35;rueck.bs=35; } //... }Aufruf mit:
koords=einfuegen ( koords );Vielen Dank euch allen.
Tim

-
Um das ganze etwas schöne zu gestalten würde ich die Eingabe einfach auf lower case umwandeln und dann überprüfen. (sofern das innerhalb des Namens ebenfalls erlaubt sein soll; ansonsten könntest du auch nur den ersten Buchstaben umwandeln)
http://www.cplusplus.com/reference/clibrary/cctype/tolower.html
Und dann würde ich da noch ein wenig auf die Einrückung achten. Klammern sollten immer zu einem Block gehören, welchen man erkennen sollte.
z.B so:
if ( blabla ){ ... }oder
if ( blabla ) { ... }aber sicher nicht:
if ( blabla ){ ... }
-
ich habs eben nur nit einem if probiert.
Wenn ich jetzt z.B. London dazunehme, gehts wieder nicht und der Flughafen wird wieder ncicht erkannt.koord einfuegen (koord koords) { int qqq=0; koord rueck; if (koords.name == "Frankfurt" || koords.name == "EDDF" || koords.name == "eddf" || koords.name == "FRA" || koords.name == "fra" || koords.name == "frankfurt" || koords.name == "FRANKFURT") { rueck.name = "Frankfurt"; rueck.lg=50;rueck.lm=1;rueck.lae='N';rueck.bg=8; rueck.bm=32;rueck.bre='O';rueck.ls=35;rueck.bs=35; } if ( koords.name == "London" || koords.name == "london" || koords.name == "EGLL" || koords.name == "egll" || koords.name == "LHR" || koords.name == "lhr" || koords.name == "LONDON" ) { rueck.name = "London"; rueck.lg=51;rueck.lm=28;rueck.lae='N';rueck.bg=0; rueck.bm=27;rueck.bre='W';rueck.ls=39;rueck.bs=41; } //.. }um hilfe wird gebeten,
Tim
-
Schau doch mit dem Debugger, ob die Werte innerhalb der Funktion dem entsprechen, was du erwartest. Dann findest du schnell heraus, wo es happert.
-
ganz blöde frage, aber wie mache ich das mit dev-c++ ?
-
Tim1995 schrieb:
ganz blöde frage, aber wie mache ich das mit dev-c++ ?
Lies die Anleitung deiner Entwicklungsumgebung. Und wenn du dir wirklich einen gefallen tun willst: Ersetze sie! (die Entwicklung von DevC++ ist eingestellt; alternativen wären z.B. die beiden kostenlosen IDEs Microsoft Visual C++ Express 2008 oder Code::Blocks).