22. marts 2003 - 14:22Der er
24 kommentarer og 3 løsninger
C++ fejl
Jeg har lige installeret Dev-C++ på win xp og opdateret den sådan at den hedder version 4.9.7.9
Men min maskine vil ikke kopile noget. Jeg har prøvet med denne: ----sourcecode start---- #include <iostream.h>
void main(void) { long tal;
cout << "Skriv et stort tal og tryk på Enter: "; cin >> tal; cout << "Du skrev tallet " << tal << endl; } ----Sourcecode end---- men når jeg kører den exe der bliver lavet så kommer der en fejlbesked der siger: ---------------------------------- C:\1.exe The NTVDM CPU has encountered an illegal instruction. CS:06b9 IP:0103 OP:63 6c 75 64 65 Choose 'Close' to terminate the application |-------| |--------| | Close | | Ignore | |-------| |--------| -------------------------------- hvordan kan jeg rette dette problem? Jeg mener jeg har kunne gøre nøjagtig det samme under win ME uden probemer.
Det er ikke java jeg programmerer. Det er som i også kan se i den kategori jeg har valgt C++ og i det IDG hæfte af Kris Jamsa hedder det #include <iostream.h> men det kan da godt være at det har ændret sig med tiden for så vidt jeg kan se er mit hæfte lidt gammelt da Kris kører alt i dos både kopiler og koder i EDIT. Men det skal jeg ikke kunne sige. I hvert tilfælde har den selv samme sourcekode virket før under winME kan det have noget med styresystemet at gøre?
Og jo den vil gerne kompile, men jeg kan ikke køre execute programmet, og heller ikke hvis jeg starter det op via dosprompten. er det pga. dev-cpp ikke virker med winXP og i dette tilfælde hvilken kompiler kan jeg da bruge?
Hmm, din kode kører ellers fint i Dev-C++ 4.9.4.1 på min XP Pro (ntfs). Du kan jo prøve Borlands C++ 5.5 compiler, men det er KUN en compiler, dvs. ikke noget IDE eller andet grafisk.
Men jeg formoder, at det har været lidt ligesom: - de ønskede namespaces i ANSI C++ - de ønskede mulighed for bagud-kommpabilitet og at man derfor valgte at iostream.h var uden namespaces mens iostream var med namespaces.
arne > En hurtig kommentar. Bjarne siger ("The C++ Programming Language", Third Edition, 8.2.9.1 p. 183): I consider nonlocal using-directives primarily a transition tool. Med andre ord, Bjarne ville foretrække at dit første eksempel (med using namespace std;) bliver til
Men så slipper du for de grå hår når du en gang i fremtiden laver en #include af en ny headerfil, som tilfældigvis definerer nogle symboler som har samme navn som nogle du bruger i forvejen, og som du har hevet ind i det globale namespace med using namespace whatever;
Jeg har intet imod at taste et par ekstra linier i min kode; om der er 70.000 linier i et projekt eller 70.700 gør ikke den store forskel. Men hvis jeg får et navnesammenstød ud af at indføre et nyt klassebibliotek har jeg først for alvor problemer. Det er det Bjarne mener er problemet med using namespace whatever.
Og hvis du nu indfører et nyt tredieparts klassebibliotek som tilfældigvis har et symbol der hedder vector eller list eller .... Så kan du få balladen.
Jeg foretrækker at undgå den ballade, og bruger derfor ikke using-directives. Det er så lidt irriterende at man skal hive de individuelle symboler ind i det globale namespace, men så er det i det mindste noget jeg gør bevidst.
Det er i bund og grund et spørgsmål om hvad man foretrækker. Lige indtil man kommer til at bruge using namespace whatever; en gang for meget, og du får navnesammenstød.
Derudover, så forsøger jeg at gøre tingene som Bjarne siger de skal gøres :-). Og det betyder ingen using namespace, med mindre det er i forbindelse med flytning af kode fra ARM C++ til ANSI C++.
Det der med at rette kan være ekstremt besværligt i et stort projekt. Særlig grimt bliver det hvis nogle kildetekstfiler bruger symbol x i namespace y, andre bruger symbol x i namespace z, og så skal der til at blandes (så alle filer bruger både y::x og z::x). Den kan ikke reddes med using namespace, men hvis du nøjes med using y::x og så eksplicit bruger z::x andre steder, så er problemet løst - fra starten.
Det er også meget aktuelt ved konverteringer af gamle programmer til en ny og større implementation med hele piv tøjet, hvis programmet er omfangsrigt nok vil der komme konflikter.
Svaret er simpelthen at der er en fejl i kompileren. Jeg har prøvet at hente den, og den version du har hentet virker ikke. Hent version 4.9.7.9 med den GAMLE kompiler, det skulle virke. Den nye laver underlige ting...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.