nahoy Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 jeg har installert en dos-kompilator for c++ som heter djgpp. dessverre får jeg en feilmelding når jeg skal kompilere filene mine. Jeg lagde et enkelt "hello, world!" program: #include <iostream> int main() { cout << "Hello, World\n"; return -1; } feilmeldingen blir slik: C:\DJGPP\PROGS>gpp hello.cchello.cc: In function 'int main()': hello.cc:4: error: 'cout' was not declared in this scope Hvorfor får jeg denne meldingen? Lenke til kommentar
GenericName Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 (endret) ... Endret 11. januar 2011 av Token Lenke til kommentar
nahoy Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 kopierte koden herfra: http://gamma.magnet.fsu.edu/tutor/basics/hellocpp/ der står den med return -1, men de fleste andre steder står det return 0. Vet ikke hva forskjellen er, men feilen var visst at jeg hadde skrevet <iostream> istedenfor <iostream.h> Lenke til kommentar
A_N_K Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 Returkoden i main() bestemmer returkoden til selve programmet, akkurat hva returkoden betyr er opptil applikasjonsprogrammereren å bestemme. Men 0 pleier å bety "alt bra". Lenke til kommentar
☀ ❄ Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 [...] men feilen var visst at jeg hadde skrevet <iostream> istedenfor <iostream.h> Nei, <iostream> er riktig. Problemet var at du ikke hadde fortalt kompilatoren at cout ligger i namespace std. Riktig måte er slik: #include <iostream> int main() { using std::cout; cout << "Hello world!\n"; return 0; } Eller slik: #include <iostream> int main() { using namespace std; cout << "Hello world!\n"; return 0; } Lenke til kommentar
nahoy Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 (endret) [...] men feilen var visst at jeg hadde skrevet <iostream> istedenfor <iostream.h> Nei, <iostream> er riktig. Problemet var at du ikke hadde fortalt kompilatoren at cout ligger i namespace std. Riktig måte er slik: #include <iostream> int main() { using std::cout; cout << "Hello world!\n"; return 0; } Hmm.. har da brukt visual c++ før uten namespace std linjen.. merkelig hva betyr egentlig den linjen? Må jeg skrive noe mer for å bruke cin og andre commandoer? Jobber forresten med et lite program nå: #include <iostream> int main() { using namespace std; int hemmeligTall = 1 + (rand()%10); int gjettetTall = 111; while (hemmeligTall != gjettetTall) { cout << "Hvilket tall tenker jeg paa?"; cin >> gjettetTall; cout << "\n"; if (gjettetTall == hemmeligTall) { cout << "Riktig!!"; } else if (gjettetTall > hemmeligTall) { cout << "For stort!!"; } else { cout << "For lavt!!"; } cout << "\n\n\n"; } return 0; } Det er to problemer: 1. hemmeligTall blir alltid 3 2. Får en feilmelding som sier One or more CON code pages invalid for given keyboard code når jeg kjører programmet. Endret 11. juni 2005 av nahoy Lenke til kommentar
GenericName Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 (endret) ... Endret 11. januar 2011 av Token Lenke til kommentar
nahoy Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 Hvorfor gjettetTall = 111;? skrev det inn tildligere for å feilsøke, og så glemte jeg å fjerne det igjen Lenke til kommentar
GenericName Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 (endret) ... Endret 11. januar 2011 av Token Lenke til kommentar
nahoy Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 while (1) { cout << "Hvilket tall tenker jeg paa?"; cin >> gjettetTall; cout << "\n"; if (gjettetTall == hemmeligTall) { cout << "Riktig!!"; break; } else if (gjettetTall > hemmeligTall) { cout << "For stort!!"; } else { cout << "For lavt!!"; } cout << "\n\n\n"; } return 0; } Skjønte helt hva du mente med det andre, men er ikke dette en såkalt infinity-loop? 1 vil alltid være 1 og dermed alltid være true. Lenke til kommentar
GenericName Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 (endret) ... Endret 11. januar 2011 av Token Lenke til kommentar
nahoy Skrevet 11. juni 2005 Forfatter Del Skrevet 11. juni 2005 (endret) ahh.. så ikke den, jeg. Edit: tyrkleif Endret 11. juni 2005 av nahoy Lenke til kommentar
☀ ❄ Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 rand() % 10 er "riktig" måte å gjøre det på, i alle fall i et enkelt eksempel som dette. rand() % 10 gir et pseudo-tilfeldig tall mellom 0 og 9, inklusivt. Du vil nok få et bedre resultat om du bruker srand(time(0)); i programmet ditt: #include <iostream> #include <ctime> int main() { using namespace std; srand(time(0)); cout << "Random number: " << rand(); cout << "\nBetween 0 and 9: " << rand() % 10 << endl; return 0; } Lenke til kommentar
zyp Skrevet 11. juni 2005 Del Skrevet 11. juni 2005 Hmm.. har da brukt visual c++ før uten namespace std linjen.. merkelig Sikker på at det ikke var <iostream.h> du inkluderte da, i stedet for <iostream>? <iostream.h> er utdatert, og i alle fall med gcc får man advarsel om man bruker den. Poenget med å pakke ting inn i namespaces er å unngå kollisjoner mellom navn. Si at to biblioteker har funksjonen cleanup(), for å rydde opp. Da må de gis navn som foo_cleanup() og bar_cleanup(). Hvis de i stedet bruker namespaces så har du f.eks Foo::cleanup() og Bar::cleanup(). Om du bare bruker et av de, så er det ingenting i veien for å bruke using namespace Foo;, og da kan du bare bruke cleanup(). Lenke til kommentar
kattemat Skrevet 12. juni 2005 Del Skrevet 12. juni 2005 Du må seede random generatoren din, ellers vil du få samme random verdier hver ang. Prøv: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <sys/types.h> #include <unistd.h> int main(int argc, char *argv[]) { int i; if((argc > 1) && !strcmp(argv[1], "-seed")) { printf("seeding...\n"); srand(time(0) + getpid()); } printf("10 random numbers: "); for(i = 0; i < 10; i++ ) printf("%3d%c", rand() % 100, (i == 9) ? '\n' : ' '); return 0; } kjør denne med og uten -seed opsjonen noen ganger Lenke til kommentar
☀ ❄ Skrevet 12. juni 2005 Del Skrevet 12. juni 2005 Med all respekt, kattemat, han skriver C++ under Windows. Er det ikke da litt skivebom å servere C for Linux(/Unix)? Lenke til kommentar
kattemat Skrevet 12. juni 2005 Del Skrevet 12. juni 2005 (endret) Med all respekt, kattemat, han skriver C++ under Windows. Er det ikke da litt skivebom å servere C for Linux(/Unix)? Tja...mulig jeg burde lest tråden fra toppen, men om vi fjerner getpiden(og unistd?) så bør det vel kompilere på win32 også? Har ikke noe windows boks å teste på dog. Uansett, var bare for å illustrere et poeng men litt praktisk testing... om det da er C eller C++ en bruker så gjør det strengt tatt ikke så mye så lenge det er C bibliotek funksjoner en snakker om? men for all del la meg prøve å spytte sammen et c++ eksempel: #include <iostream> #include <iomanip> #include <ctime> #include <string> using namespace std; int main(int argc, char *argv[]) { int i; if(argc > 1) { string s(argv[1]); if(!s.compare("-seed")) { cout << "seeding..." << endl; srand(time(0)); } } cout << "10 random numbers: "; for(i = 0; i < 10; i++ ) cout << setw(4) << rand() % 100; cout << endl; return 0; } La oss virkelig håpe dette fungerer på win32 da... (EDIT: ble litt stygg formatering) Endret 12. juni 2005 av kattemat Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå