undeclard identifier "cin" < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 21:00 Mi 25.05.2005 | Autor: | Maria84 |
Hallo Leute,
ich muß (als Computerversagerin) ein paar einfache c-Programme als Hausaufgabe schreiben. Dazu habe ich mir den freien lcc-compiler von Jacob Navia heruntergeladen, der auch vom Lehrstuhl empfohlen wird.
Leider scheiterte ich schon am einfachsten Programm, weil beim compilieren angezeigt wurde, daß "cin" undeklariert wäre. Ich habe daraufhin das einfachste c-Programm abgetippt, was ich finden konnte (aus dem Vorlesungsskript), um zu testen, woran es liegt, und es kommt fast dieselbe Fehlermeldung:
#include<iostream.h>
main()
{ int a,b,c;
cout<<"Geben Sie drei zahlen [mm] ein!\n;
[/mm]
cin>>a>>b>>c;
cout<<"Das Minimum ist "
<<((a<b)?((a<c)?a:c):((b<c)?b:c));
}
Das Problem ist, daß er beim compilieren, abgesehen davon, daß er einen return-Wert vermisst (was aber nicht das Problem sein soll)
wegen "cin" als undeclared rummeckert, ebenso in der cin-Zeile, daß das statement keinen effect hat. In Folge davon natürlich possible usage of a,b,c ,cin before definition.
Genau denselben Quark zeigt er bei anderen Programmen.
Kann mir das jemand erklären?
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Hi Maria,
ich denke es geht deswegen nicht, weil du keine namespaces eingebunden hast.
Füge mal folgende Zeile vor dem main-Teil ein:
using namespace std;
D.h. man benutzt nun die Standard-Namensumgebung. Wenn du dein Programm so lassen willst musst du
anstatt cout und cin
std::cout und std::cin benutzen, damit der Compiler weiß, was er benutzen soll.
Probier das mal aus.
MfG Andi
|
|
|
|
|
Hallo Maria,
> Leider scheiterte ich schon am einfachsten Programm, weil beim compilieren angezeigt wurde, daß "cin" undeklariert wäre.
Das hört sich nach einer falschen "#include"-Präprozessor-Direktive an.
> Ich habe daraufhin das einfachste c-Programm
> abgetippt, was ich finden konnte (aus dem
> Vorlesungsskript), um zu testen, woran es liegt, und es
> kommt fast dieselbe Fehlermeldung:
>
> 1: | #include <iostream.h>
| 2: | >
| 3: | > main()
| 4: | >
| 5: | > { int a,b,c;
| 6: | >
| 7: | > cout<<"Geben Sie drei zahlen ein!\n;
| 8: | > cin>>a>>b>>c;
| 9: | > cout<<"Das Minimum ist "
| 10: | > <<((a<b)?((a<c)?a:c):((b<c)?b:c));
| 11: | >
| 12: | > } |
>
>
>
> Das Problem ist, daß er beim compilieren, abgesehen davon,
> daß er einen return-Wert vermisst (was aber nicht das
> Problem sein soll)
> wegen "cin" als undeclared rummeckert, ebenso in der
> cin-Zeile, daß das statement keinen effect hat. In Folge
> davon natürlich possible usage of a,b,c ,cin before
> definition.
> Genau denselben Quark zeigt er bei anderen Programmen.
Bei mir wurde dein Quelltext kompiliert (ich habe jetzt als Rückgabewert 'void' eingefügt, und scheinbar fehlten da noch schließende Anführungsstriche beim Text zum ersten 'cout'.):
1: | #include <iostream.h>
| 2: |
| 3: | void/**/ main()
| 4: |
| 5: | { int a,b,c;
| 6: |
| 7: | cout<<"Geben Sie drei zahlen ein!\n"/**/;
| 8: | cin>>a>>b>>c;
| 9: | cout<<"Das Minimum ist "
| 10: | <<((a<b)?((a<c)?a:c):((b<c)?b:c));
| 11: |
| 12: | } |
Die entsprechenden Stellen sind mit leeren Kommentaren versehen. Es kann also nur an dieser '#include'-Anweisung liegen. Möglicherweise kann der Präprozessor deines Compilers nichts mit den spitzen Klammern ('<', '>') dieser Anweisung anfangen, weil irgendwelche Quellpfade für den Compiler (noch) nicht gesetzt wurden. Die spitzen Klammern sind nämlich ein Befehl an den Präprozessor den Standardpfaden folgend nach dem entsprechenden Quelltext (hier für cin und cout) zu suchen. Wenn die Pfade nicht richtig gesetzt wurden, kann er keinen entsprechenden Quelltext finden.
Versuche deshalb dein Programm syntaktisch so korrekt und konservativ wie möglich zu formulieren. Z.B. mögen manche alten C-Compiler keine Variablendefinitionen mit gleichzeitiger Zuweisung:
1: | int k = 3; /*Fehler, obwohl syntaktisch korrekt!*/
| 2: |
| 3: | int k;
| 4: | k =3; /*Ok!*/ |
Nebenbei bemerkt: Wie hast Du deine Quelldatei benannt? test.c oder test.cpp oder test.cc? Es wird dich vielleicht überraschen, aber manche Compiler erkennen allein an der Dateiendung der Quelltext-Datei die Programmiersprache, die dort benutzt wurde. Wenn Du also Sprachelemente aus C++ benutzt, aber als Dateiendung '.c' gesetzt hast, könnte der Compiler Dich "mißverstehen".
Viele Grüße
Karl
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:21 Do 26.05.2005 | Autor: | Maria84 |
Hallo Karl,
vielen lieben Dank für Deine Antwort (ich habe das Programm übrigens als
*.c gespeichert), aber ich glaube, das problem lag ganz woanders.
Wenn ich in das Installationsverzeichnis des Entwicklungstools gehe, und dort die iostream.h-Textdatei öffne, erklärt der "Macher", das iostream nur für cout definiert sei, weil er für cin noch keine Zeit hatte.
Und solche Programme werden offiziel vom Lehrstuhl empfohlen.
Ich Danke Dir jedenfalls für Deine Mühe, ebenso allen anderen, die sich das durchgelesen haben.
|
|
|
|