søppel Skrevet 6. juli 2004 Del Skrevet 6. juli 2004 Forstå at dette har ikke noe med C++ å gjøre direkte - det har mer med hvilket IDE (editor/miljø) man bruker. - MinGW Studio har støtte for dette. - Visual C++ har støtte for dette. - Emacs også tror jeg. - KDevelop også tror jeg. - o.s.v. Lenke til kommentar
Jonas Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 (endret) Forstå at dette har ikke noe med C++ å gjøre direkte - det har mer med hvilket IDE (editor/miljø) man bruker. - MinGW Studio har støtte for dette. - Visual C++ har støtte for dette. - Emacs også tror jeg. - KDevelop også tror jeg. - o.s.v. Visual C++, det er noe microsoft har laget, og sansynelighvis er ganske lik den jeg bruker til VB? Da prøver jeg den Takk skal du ha! Edit: Ser ikke ut som det er gratis.. Må jeg *host* skaffe den på andre måter? Endret 7. juli 2004 av Jonas Lenke til kommentar
søppel Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 (endret) Må jeg *host* skaffe den på andre måter? Jupp, må nok det. Endret 7. juli 2004 av søppel Lenke til kommentar
Klette Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 Kjøpe den? Finnes det andre måter? Lenke til kommentar
søppel Skrevet 7. juli 2004 Del Skrevet 7. juli 2004 (endret) Hakke peil .. heh. Bytte? GCC/MinGW/EnEllerAnnenPortHer funker utmerket sånn ellers eller uansett, i hvertfall til mitt bruk. :] Endret 7. juli 2004 av søppel Lenke til kommentar
Arntfinn Skrevet 10. juli 2004 Del Skrevet 10. juli 2004 Heisann, jeg trenger litt hjelp med strenger i C. Jeg skal lese inn tastetrykk for så å skrive de ut baklengs. oppgave nr 12336 Et tips er char ch; while( ch = getchar(), ch >= 0 ) /* ch < 0 indicates end-of-data */ men jeg skjønner ikke helt hva jeg skal gjøre etterpå, for uansett hva jeg har "inne" i whileloopen så kommer jeg ikke ut av den. Det er meningen at den skal stoppe etter jeg har trykket noen taster og trykker på enter? Det jeg prøvde på først var å lage en "char streng[10]" og en integer, og så skal jeg legge ch i streng[integer] og inkremere integeren helt til jeg trykker på enter. Så skal jeg gå baklengs og dekremere. Er dette riktig fremgangsmåte, eller er strenger i C noe hurlumhei jeg ikke har skjønt? Lenke til kommentar
søppel Skrevet 10. juli 2004 Del Skrevet 10. juli 2004 Exercise 12336... Read until you encounter end-of-data (see below). ... ..under står det: ...end-of-data (type control-D to indicate end of data at a terminal, ... Lenke til kommentar
Arntfinn Skrevet 10. juli 2004 Del Skrevet 10. juli 2004 Exercise 12336... Read until you encounter end-of-data (see below). ... ..under står det: ...end-of-data (type control-D to indicate end of data at a terminal, ... Haha, under neste oppgave står det ja. Det burde stå i selve kapittelet også, hvertfall ikke bare under en oppgave. Ble veldig nervøs nå, for det tok en stund før jeg fant det Får se om jeg får det til nå, takk skal du ha Lenke til kommentar
Dead_Rabbit Skrevet 11. juli 2004 Del Skrevet 11. juli 2004 Heisan, lurer på en ting anngående extern: Hva er egentlig vitsen med å (som jeg har skjønt) bare deklarere en variabel eller hva enn mann velger å sette bak extern. På forhånd takk for alle svar. Lenke til kommentar
søppel Skrevet 11. juli 2004 Del Skrevet 11. juli 2004 (endret) fil1.txt: int a; fil2.txt: int a; Hvis vi kompilerer disse hver for seg går dette helt fint, men hvis vi linker dem sammen går det dritt: g++ fil1.txt fil2.txt -o blah/tmp/ccxUU2lt.o(.bss+0x0): multiple definition of `a' /tmp/ccYmESvt.o(.bss+0x0): first defined here Det finnes m.a.o., som kompileren sier, flere definisjoner av a. Så man gjør i stedet slik: fil3.txt: extern int a; int main() { a = 123; return(0); } fil4.txt: int a; g++ fil3.txt fil4.txt -o blah Her finnes det bare én definisjon av a. Legg merke til at: - void a(); // er en deklarasjon - extern int a; // er en deklarasjon - void a() {} // både er en deklarasjon og definisjon - int a; // både er en deklarasjon og definisjon Endret 11. juli 2004 av søppel Lenke til kommentar
☀ ❄ Skrevet 11. juli 2004 Del Skrevet 11. juli 2004 extern brukes ofte til globale konstanter o.l. Du har en headerfil med deklarasjonen, og en implementasjonsfil med definisjonen. På den måtet kan du inkludere headerfila på flere steder uten å bryte endefinisjonsregelen. Eksempel gamedefs.hpp: extern int total_lives; gamedefs.cpp: int total_lives = 5; Lenke til kommentar
Dead_Rabbit Skrevet 11. juli 2004 Del Skrevet 11. juli 2004 Takker for svar, jeg skjønner det bedre nå, men ikke helt. Søppel: fil3.txt: extern int a; int main() { a = 123; return(0); } Hvordan kan man gi en verdi til noe som bare er en deklarasjon? Lenke til kommentar
☀ ❄ Skrevet 11. juli 2004 Del Skrevet 11. juli 2004 En deklarasjon sier "Hør her, Kompilator, det finnes noe som heter a, og det er et heltall". Da tenker Kompilatoren "Javel, hvis du sier det, så... Men jeg vil gjerne se en definisjon før jeg er helt ferdig!" Så lar Kompilatoren deg jobbe med den deklarerte variabelen. Men, hvis du bare tuller med Kompilatoren og egentlig ikke har noe heltall ved navn a noe sted, da kommer Kompilatorens venn Linkeren og klager. Lenke til kommentar
søppel Skrevet 11. juli 2004 Del Skrevet 11. juli 2004 (endret) Hvordan kan man gi en verdi til noe som bare er en deklarasjon? Programmet kjøres ikke "der og da" under kompilering; det skjer som Myubi sier etter at begge filene er kompilert og linket sammen, og du starter programmet. Når man har deklarert extern int a;, men glømt å definere et sted, eller glømt å linke med objekt-fila der int a er definert, kan man kan nesten tenke seg i detalj hva linkeren driver med når man hører "unresolved external". Så extern int a; sier på en måte: int a = &ukjennt_addresse; ..under kompilering. Da blir det linkerens oppgave å gi (resolve) en addresse til a; int a = &addressen til a; (Addressene er relative, statiske addresser i dette tilfellet. Du må nesten lese en bok for å finne ut mer om dette.) g++ -c blah.cpp Kompilerer blah.cpp til en objekt-fil blah.o (binærkode). g++ -c bah.cpp Kompilerer bah.cpp til en objekt-fil bah.o (binærkode). g++ blah.cpp bah.cpp -o blah Kompilerer først blah.cpp til en objekt-fil (binær-kode), så bah.cpp, deretter linkes objektfilene (blah.o bah.o) sammen til filen blah (eller blah.exe under Windows). Ting foregår altid i slike skritt: Compile -> Link eller egentlig: Preprocessing (macro-stuff) -> Template-instantiation -> Compile -> Link http://www.cpp.no/lars/ticpp-v1/Chapter02.html#Heading79 http://www.cpp.no/lars/ticpp-v1/Chapter03.html#Heading132 Edit: Når jeg tenker meg om så produseres det også asm-kode i et skritt .. Kanskje det er flere skritt også, men ikke så alt for viktig dette. Endret 11. juli 2004 av søppel Lenke til kommentar
Dead_Rabbit Skrevet 12. juli 2004 Del Skrevet 12. juli 2004 Nå skjønner jeg ting her ja. Takk for hjelp (Myubi og Søppel). Lenke til kommentar
☀ ❄ Skrevet 12. juli 2004 Del Skrevet 12. juli 2004 Jeg tror ikke kompilatoren går veien om asm med mindre man ber om det. Det er godt mulig jeg tar feil, men jeg tror kompilatorene generelt gjør om direkte fra C++ til maskinkode nå om dagen. Lenke til kommentar
søppel Skrevet 12. juli 2004 Del Skrevet 12. juli 2004 (endret) Jo, den gjør det, internt i hvertfall: http://users.actcom.co.il/~choo/lupg/tutor...mpilation_steps Edit: Kan være at andre kompilere gjør ting annerledes. Så det man ber kompileren om er egentlig å stoppe etter/før ett av skrittene. Endret 12. juli 2004 av søppel Lenke til kommentar
Dead_Rabbit Skrevet 12. juli 2004 Del Skrevet 12. juli 2004 (endret) Har problemer med en litt ting her. Jeg har: program.cpp, funk.cpp, funk.h Og jeg skal jo da legge funksjonen funk() i en headerfil som dere forstår. Etter som jeg har forstått skal jeg ha deklarasjonen av funk() i funk.h, og definisjonen av funk() i funk.cpp. Deretter skal jeg inkludere funk.h i program.cpp(som jeg skal bruke funk() i). Spørsmålet mitt er da: Hva er feil? funk.h: #ifndef GUARD_funk #define GUARD_funk #include <iostream> #include "funk.cpp" double funk(double a, double b); #endif Her gikk det fint: funk_h.exe - 0 error(s), 0 warning(s) funk.cpp: #include <iostream> #include "funk.h" using namespace std; double funk(double a, double b) { return (a+b); } Feilmelding:Linking... C:\MinGWStudio\MinGW\bin\..\lib\gcc-lib\mingw32\3.3.1\..\..\..\libmingw32.a(main.o)(.text+0x97):main.c: undefined reference to `WinMain@16' program.cpp: #include <iostream> #include "funk.h" using namespace std; int main() { double a,b,c; cout << "Les inn verdier til variablene a og b: "; cin >> a >> b; cin.ignore(); c = funk(a, b); cout << endl << c; cin.get(); } Feilmelding: test.cpp:2:20: funk.cpp: No such file or directory test.cpp: In function `int main()': test.cpp:9: error: `funk' undeclared (first use this function) test.cpp:9: error: (Each undeclared identifier is reported only once for each function it appears in.) test.cpp:12:2: warning: no newline at end of file Kan desverre ikke vise hvordan jeg kompilerer og linker fordi jeg ikke er på den PC``en hvor jeg har msys og alt det der. Men jeg bruker MinGW Studio. Edit:Glemte å legge til feilmeldinger. Edit2: Takk for retting saboi, den hadde jeg skrevet riktig når jeg testa programmet, var bare en feil her. Endret 12. juli 2004 av zirener Lenke til kommentar
saboi Skrevet 12. juli 2004 Del Skrevet 12. juli 2004 (endret) funk.cpp skal inkludere funk.h program.cpp skal inkludere funk.h jeg skjønner ikke helt. kompilerer programmet nå? hvis det ikke gjør det så fjern #include "funk.cpp" fra funk.h og du burde vel også velge console project istedetfor win32 project Endret 12. juli 2004 av saboi 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å