Avatar billede brixz Nybegynder
22. marts 2003 - 14:22 Der 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.

nogen der har nogle ider?
Avatar billede human Nybegynder
22. marts 2003 - 14:25 #1
Bare en lille ting, hedder det ikke

#include <iostream>

Altså uden .h, er det ikke i java? :o)
Avatar billede abpdk Nybegynder
22. marts 2003 - 14:32 #2
Hvis den ikke vil compile noget som helst, hvor får du så den .exe-fil fra!?
Avatar billede arne_v Ekspert
22. marts 2003 - 16:00 #3
Prøv med:

#include <iostream>

using namespace std;

int main(void)
{
  long tal;
  cout << "Skriv et stort tal og tryk på Enter: ";
  cin >> tal;
  cout << "Du skrev tallet " << tal << endl;
}
Avatar billede arne_v Ekspert
22. marts 2003 - 16:02 #4
human>

I "gammel" C++ er det:

#include <iostream.h>

I ANSI C++ er det:

#include <iostream>

using namespace std;

og Java har ikke nogen include.
Avatar billede human Nybegynder
22. marts 2003 - 18:35 #5
Nej nej.. Men den har da en iostream.h eller hva? :o)
Avatar billede arne_v Ekspert
22. marts 2003 - 19:09 #6
Nej.

Jeg tror du forsøger på at være morsom, men jeg er vist for
for tykhovedet til at fange pointen.
Avatar billede human Nybegynder
22. marts 2003 - 21:47 #7
Nej faktisk ikke...

For 1 års tid siden da jeg sad og skrev lidt java, der mente jeg bare at jeg brugte iostream.h.

Må huske forkert.
Så, men så ved jeg da det :o)
Avatar billede arne_v Ekspert
22. marts 2003 - 21:50 #8
Du tænker muligvis på konstruktioner a la:

import java.io.ObjectOutputStream;
import java.io.ObjectInputStream;
Avatar billede brixz Nybegynder
22. marts 2003 - 23:52 #9
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?
Avatar billede brixz Nybegynder
22. marts 2003 - 23:54 #10
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?
Avatar billede brixz Nybegynder
22. marts 2003 - 23:56 #11
arne_v -->
I "gammel" C++ er det: #include <iostream.h>
I ANSI C++ er det: #include <iostream>

hvad er forskellen? skær venligst ud i pap da jeg er newbie i c++ området
Avatar billede abpdk Nybegynder
22. marts 2003 - 23:58 #12
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.

http://www.borland.com/products/downloads/download_cbuilder.html#
Avatar billede hhdsleizer Nybegynder
23. marts 2003 - 03:42 #13
----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;
return 0;
}
----Sourcecode end----

kan godt være det ikke er rigtigt.. men skulle jo lige prøve
Avatar billede arne_v Ekspert
23. marts 2003 - 09:29 #14
Jeg kender ikke den eksakte argumentation brugt.

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.
Avatar billede arne_v Ekspert
23. marts 2003 - 09:30 #15
Namespaces betyder at forskellige ting kan have samme navn
bare de er i forskellige namespaces.

Derfor skal man bruge enten:

#include <iostream>

using namespace std;

cout << "Skriv et stort tal og tryk på Enter: ";

eller:

#include <iostream>

std::cout << "Skriv et stort tal og tryk på Enter: ";
Avatar billede arne_v Ekspert
23. marts 2003 - 09:31 #16
fordi cout er i namespace std.
Avatar billede olennert Nybegynder
24. marts 2003 - 08:47 #17
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

#include <iostream>

using std::cout;

cout << "Skriv et stort tal og tryk på Enter: ";
Avatar billede arne_v Ekspert
24. marts 2003 - 18:09 #18
Kan det ikke blive til en hel del using ?

:-)
Avatar billede olennert Nybegynder
24. marts 2003 - 21:05 #19
Jo, det kan blive til forbistret mange using :-(

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.
Avatar billede arne_v Ekspert
24. marts 2003 - 22:03 #20
Jeg er ikke helt sikker på at jeg kan følge dig.

using namespace std;

Vil kun give problemer hvis jeg har noget der hedder
det samme som noget i namespace std.

Det er selvfølgelig også en af mulighederne med namespace,
men jeg vil nu alligevel betragte det som god skik og brug
at forsøge at undgå det.
Avatar billede olennert Nybegynder
24. marts 2003 - 22:22 #21
arne >

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.
Avatar billede olennert Nybegynder
24. marts 2003 - 22:23 #22
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++.
Avatar billede arne_v Ekspert
24. marts 2003 - 23:08 #23
Altså man inkluderer en ny header fil som har en konflikt og man
får en compiler fejl og man retter det og ?

Men derudover hvis det er blevet en almindelig accepteret konvention,
så kan jeg godt se pointen i at følge den.
Avatar billede olennert Nybegynder
25. marts 2003 - 08:59 #24
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.
Avatar billede segmose Nybegynder
25. marts 2003 - 09:59 #25
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.
Avatar billede hemmelig_ninja Nybegynder
26. marts 2003 - 09:55 #26
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...
Avatar billede brixz Nybegynder
04. juli 2003 - 21:14 #27
ok tak for jeres svar alle sammen ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester