Black_and_Scholes Skrevet 20. november 2008 Del Skrevet 20. november 2008 Hei. Er det noen grunn til at følgende kode ikke skal kunne kompileres i en kompilator ved navn Dev-C++? Den er kopiert fra en bok, så det er kanskje litt forskjellig språk til forskjellige kompilatorer? Kan noen eventuelt fortelle meg navnet på en kompilator hvor denne koden virker? Det er jo ganske viktig at kodene som oppgis i boken virker når man følger boken.... 1: // Listing 2.2 using cout 2: 3: #include <iostream.h> 4: int main() 5: { 6: cout << "Hello there.\n"; 7: cout << "Here is 5: " << 5 << "\n"; 8: cout << "The manipulator endl writes a new line to the screen." << Âendl; 9: cout << "Here is a very big number:\t" << 70000 << endl; 10: cout << "Here is the sum of 8 and 5:\t" << 8+5 << endl; 11: cout << "Here's a fraction:\t\t" << (float) 5/8 << endl; 12: cout << "And a very very big number:\t" << (double) 7000 * 7000 << Âendl; 13: cout << "Don't forget to replace Jesse Liberty with your name...\n"; 14: cout << "Jesse Liberty is a C++ programmer!\n"; 15: return 0; 16: } Lenke til kommentar
aC Skrevet 20. november 2008 Del Skrevet 20. november 2008 (endret) // Listing 2.2 using cout #include <iostream> using namespace std; int main() { cout << "Hello there.\n"; cout << "Here is 5: " << 5 << "\n"; cout << "The manipulator endl writes a new line to the screen." << endl; cout << "Here is a very big number:\t" << 70000 << endl; cout << "Here is the sum of 8 and 5:\t" << 8+5 << endl; cout << "Here's a fraction:\t\t" << (float) 5/8 << endl; cout << "And a very very big number:\t" << (double) 7000 * 7000 << endl; cout << "Don't forget to replace Jesse Liberty with your name...\n"; cout << "Jesse Liberty is a C++ programmer!\n"; return 0; } try that Endret 20. november 2008 av aC Lenke til kommentar
Black_and_Scholes Skrevet 20. november 2008 Forfatter Del Skrevet 20. november 2008 Hmm, det virket. Er det eneste man trenger å gjøre å skrive "using namespace std;"? Og vil det dukke opp flere lignende problemer om jeg fortsetter å skrive "using namespace std;"? Uansett, takk skal du ha. Lenke til kommentar
Kagee Skrevet 20. november 2008 Del Skrevet 20. november 2008 (endret) Fjern .h fra #includene (#include <iostream.h> => #include <iostream>) og legg til using namespace std; så burde det gå bra. Kan virke som om det er en gammel bok du har fått tak i? Når det gjelder vanlige c++-kompilatorer, så finnes det ikke så mange som er vanlige. De jeg kommer på en microsoft sine, mingw/g++ (Dev-Cpp, og "hele" linuxmiljøet bruker denne) og borland sin. Alle bruker den samme c++-koden. Da du ikke fikk kompilert fikk du kanskje en feilmelding? Det skader ikke å google denne. Endret 20. november 2008 av Kagee Lenke til kommentar
BlueEAGLE Skrevet 20. november 2008 Del Skrevet 20. november 2008 Det var mange som tilbød fisk her, men jeg skal prøve å lære deg å fiske litt. Et "namespace" eller navneområde er en måte å dele inn programmet i mindre logiske enheter. Du kan tenke på et namespace som en samling med funksjoner som benyttes til å manipulere en bestemt ting. Et namespace kan for eksempel se slik ut: namespace net_connect { int make_connection(); int test_connection(); //og så videre } Du kan da kalle, fra hvor som helst i programmet handle = net_connect::make_connection(); For å unngå at du må skrive net_connect:: hver gang du vil bruke en funksjon i dette navneområdet så kan du isteden gjøre using namespace net_connect; handle = make_connection(); Et navneområde, slik jeg har forstått det, kan sees på som en singleton-klasse uten variabler. Så i din kode så kan du fjerne "using namespace std;" og bytte alle "cout" med "std::cout" og programmet vil kompilere. Konseptet med navneområder er relativt nytt og boken din trenger ikke være veldig gammel for å ikke ha dekket dette området. Nå er ikke jeg sikker på når cout ble flyttet til std-navneområdet, men det er det sikkert noen som vet. Håper det hjelper deg videre. Lenke til kommentar
GeirGrusom Skrevet 20. november 2008 Del Skrevet 20. november 2008 Når det gjelder kompilatorer er gcc og Visual C++ helt klart de vanligste. gcc følger med mingw, og Visual C++ får du tak i ved å laste ned Visual C++ Express. (fordelen med VC+ er at det følger med et overlegent IDE) En øvrig kompilator som jeg anbefaler er Digital Mars C++ som er enkel i bruk og krever ingen formell installasjon. Lenke til kommentar
Black_and_Scholes Skrevet 22. november 2008 Forfatter Del Skrevet 22. november 2008 Ok, tror jeg forstår. Skjønner i alle fall prinsippet med mainspace std. Takk for hjelpen! Men kan noen fortelle meg forskkellen på om heg skriver manin() og int main()? Må jeg bruke sistnevnte om jeg har en int-variabel i programmet? Lenke til kommentar
Kagee Skrevet 22. november 2008 Del Skrevet 22. november 2008 (endret) main() er den funksjonen som kalles først i et (iallefall et commandolinje)-c++-program. Denne må være til stede for at programmet skal gjøre noe. Hva manin() virker som en helt vanlig c++-funsksjon. Hva den gjør aner jeg ikke. int main() betyr at funksjonen main returnerer en int (heltall) når den avslutter. Siden dette er "programfunksjonen" vil dette tallet returneres til operativsystemet. Om alt gikk som det skulle, bør denne returnere 0. int main() { if ( ( 2 + 2 ) == 4 ) { return 0; // 2+2=4, verden fungerer som den skal } else { return 100; // 2+2 er ikke 4, verden er gått under } } Vanligvis kan du bare bruke den slik int main() { /* mange linjer kode som gjør noe */ return 0; } Endret 22. november 2008 av Kagee Lenke til kommentar
GeirGrusom Skrevet 22. november 2008 Del Skrevet 22. november 2008 Merk at det er ulovlig å skrive en funksjon uten å spesifisere returdatatype i C++. In gammel C så ble det default til int, i C++ vil ikke programmet kompilere. Lenke til kommentar
Black_and_Scholes Skrevet 22. november 2008 Forfatter Del Skrevet 22. november 2008 Dette programmet virker jo utmerket med main(). Hva skal til for at man må bruke int main()? Jeg har laget programmet selv, og har prøvd noen enkle funksjoner. Det er grunnen til at det er litt rart og endel unødvendige ting, hvis noen skulle lure på det... #include <iostream> using namespace std; main() { unsigned short int Lengde, Bredde; Lengde = 5; Bredde = 5; #define H 15 unsigned short int Volum = Lengde * Bredde * H; cout << "Volum: " << Volum; cout << "cm^3\n" "hvor Volum = Lengde * Bredde * Høyde"; return 0; } Lenke til kommentar
GeirGrusom Skrevet 22. november 2008 Del Skrevet 22. november 2008 (endret) int main() er synonymt med å bare skrive main(). Den går utifra at du mener int main. Hvis du vil droppe return 0; på slutten, skriver du void main istedet. Du burde i det minste får en warning, du gjør det i VC++ vet jeg, men jeg får ikke det i gcc. Endret 22. november 2008 av GeirGrusom Lenke til kommentar
Black_and_Scholes Skrevet 22. november 2008 Forfatter Del Skrevet 22. november 2008 Ok, takk. Lenke til kommentar
Kagee Skrevet 22. november 2008 Del Skrevet 22. november 2008 (endret) Du burde i det minste får en warning, du gjør det i VC++ vet jeg, men jeg får ikke det i gcc. Hvis du slenger på -Wall i g++ (f.eks eclipse gjør som std. det) får du maintest.cpp:5: warning: ISO C++ forbids declaration of ‘main’ with no type Return code er brukt mye av f.eks && og ||-kommandoene i linux, der program2 kun kjøres om program1 en returnerer 0. ~$ program1 && program2 eller at program2 kun kjøres om program1 returnerer noe annet enn null ~$ program1 || program2 Return code kan være en unsigned byte, dvs fra 0 til 255 (iallefall i linux/bash) ~$ program1; echo $? echo vil skrive ut return code Endret 22. november 2008 av Kagee Lenke til kommentar
Black_and_Scholes Skrevet 1. desember 2008 Forfatter Del Skrevet 1. desember 2008 Hei igjen. Jeg har skrevet inn denne koden: #include <iostream> #include <iomanip> #include <fstream> using namespace std; int main() { int sum = 0; int x; ifstream inFile; inFile.open("test.txt"); if (!inFile) { cout << "Unable to open file"; exit(1); // terminate with error } while (inFile >> x) { sum = sum + x; } inFile.close(); cout << "Sum = " << sum << endl; return 0; } Hva forutsetter den at ligger i "test.txt"? Jeg får opp "no match for 'operator<<'in 'inFile<<x'" Lenke til kommentar
LostOblivion Skrevet 1. desember 2008 Del Skrevet 1. desember 2008 I C standarden defaulter alle funksjoner som ikke har en definert returtype til å returnere en int. Det er ikke standarden for C++, men de fleste compilers gjør fortsatt dette. Lenke til kommentar
Kagee Skrevet 1. desember 2008 Del Skrevet 1. desember 2008 (endret) Jeg kan bare gjette på at du på et tidspunkt hadde inFile << x i koden din, i stedet for inFile >> x Det første fungerer ikke siden du har åpnet filen for lesing, det siste fungerer. I While-løkken din, bør du vel heller ha while( ! inFile.eof ( ) ) Endret 1. desember 2008 av Kagee Lenke til kommentar
Black_and_Scholes Skrevet 2. desember 2008 Forfatter Del Skrevet 2. desember 2008 Hmm, vet ikke helt om jeg skjønner. Hvordan ville dere gjort det om dere skulle returnert summen av tallene i et tekstdokument som skrift i kommandolinjen. Dokumetet kan vi kalle for test.txt. Den skal da avsluttes noe lignende dette: cout << "Sum = " << sum; Lenke til kommentar
Black_and_Scholes Skrevet 2. desember 2008 Forfatter Del Skrevet 2. desember 2008 Ingen? Lenke til kommentar
Dead_Rabbit Skrevet 2. desember 2008 Del Skrevet 2. desember 2008 Nå har jeg ikke lest alt sammen her, men hvis du skal gjøre om tall til strenger (som du jo f.eks. kan skrive til en fil eller gjøre hva du vil med), kan du bruke std::stringstream. Lenke til kommentar
Kagee Skrevet 2. desember 2008 Del Skrevet 2. desember 2008 Hmm, vet ikke helt om jeg skjønner.... Hva? Du har jo nesten hele koden. Her har jeg endret noen småting i koden din, og den fungerer #include <iostream> #include <fstream> using namespace std; /* Eksempel på test.txt: 1 2 3 1 1 1 1 1000 // Gir svaret "Sum = 1010" */ int main() { int sum = 0; int x; ifstream inFile("test.txt"); if (inFile) { inFile >> x; while (!inFile.eof()) { sum += x; // samme som sum = sum + x; inFile >> x; } inFile.close(); cout << "Sum = " << sum << endl; return 0; } else { cerr << "Feil med fil!\n"; return 1; } } 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å