Hur kommer man igång med g++?

Här diskuteras programmering och utveckling
Användarvisningsbild
christer
Inlägg: 1362
Blev medlem: 11 jan 2007, 17:42
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Hur kommer man igång med g++?

Inlägg av christer »

Hur kommer man igång med g++ ?

Skrev en kort programsnutt i en fil som heter hello.c.
Med gedit blev det så här:
#include <iostream.h>

main()
{
cout <<"hello C++ " ;
}

Hur skall man kunna kompilera och köra programmet ?
Har försökt med g++ hello.c och får:
kalle@kalle:~$ g++ hello.c
hello.c:2:22: error: iostream.h: Filen eller katalogen finns inte
hello.c: In function "int main()":
hello.c:6: fel: "cout" deklarerades inte i detta definitionsområde

Något iostream.h hittas heller inte i Ubuntu med locate.
Förväntade mig en fil a.out, som kan köras, men detta funkar inte längre.

Som sagt hur kommer man igång ? Gedit verkar i varje fall förstå C++ och färgar
texten vackert. Man gcc eller man g++ verkar hebreiska.
Användarvisningsbild
Urban Anjar
Inlägg: 7306
Blev medlem: 05 nov 2006, 22:59
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Vickleby
Kontakt:

Re: Vilket språk bör jag lära mig?

Inlägg av Urban Anjar »

Du verkar sakna headerfilen
Ubuntu från början: http://ubuntufranborjan.wordpress.com/
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Vilket språk bör jag lära mig?

Inlägg av Lars »

I C++ finns det aldrig något .h i filnamnet, d.v.s. det ska vara #include <iostream>
Användarvisningsbild
christer
Inlägg: 1362
Blev medlem: 11 jan 2007, 17:42
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Vilket språk bör jag lära mig?

Inlägg av christer »

I Ubuntu finns massor med .h filer, h står för header.
locate *.h ger också en hel del men inte iostream.h däremot finns iostream.
Jesper Ek, som skrivit Lätt Pocket om C++ programmering har också iostream.h

Utan h i iostream fås följande:
kalle@kalle:~$ g++ hello.c
hello.c: In function "int main()":
hello.c:6: fel: "cout" deklarerades inte i detta definitionsområde

cout verkar obekant, men finns också i Jespers bok. Det konstiga är att det fungerade
i mitt lastgamla SuSE. Men med Ubuntu tappade jag bort C++.
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Vilket språk bör jag lära mig?

Inlägg av Konservburk »

Det ska vara std::cout istället för cout.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Vilket språk bör jag lära mig?

Inlägg av mcNisse »

Du måste deklarera cout vilken är en medlem av namespacet std.

Antingen så skriver du:
using std::cout;

Eller så använder du
std::cout istället för cout.
Användarvisningsbild
christer
Inlägg: 1362
Blev medlem: 11 jan 2007, 17:42
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Vilket språk bör jag lära mig?

Inlägg av christer »

Nu blev det en körbar fil, som heter a.out
Men inget hände

kalle@kalle:~$ a.out
bash: a.out: kommandot finns inte

Inget hände från den grafiska delen heller.
kalle@kalle:~$ ls -al a.out
-rwxr-xr-x 1 kalle kalle 9541 2009-03-26 21:18 a.out
Körbar verkar den vara. Hur kör man då ?

Är 10 år gamla kunskaper i C++ föråldrade ?
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Vilket språk bör jag lära mig?

Inlägg av mcNisse »

./a.out
Användarvisningsbild
christer
Inlägg: 1362
Blev medlem: 11 jan 2007, 17:42
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster

Re: Vilket språk bör jag lära mig?

Inlägg av christer »

Nu äntligen lyckades jag att med Ubuntu få ett första c++ program att fungera.

kalle@kalle:~$ ./a.out
hello C++ kalle@kalle:~$

Varför just ./ och vad betyder ./ ?

Var hittar jag modernare uppgifter över C++ ?

Tack för den fina hjälpen.
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Hur kommer man igång med g++?

Inlägg av mcNisse »

Det är en sökväg som gör att programmet hittas. Det är för att du inte har aktuell katalog i PATH variabeln.
Användarvisningsbild
Urban Anjar
Inlägg: 7306
Blev medlem: 05 nov 2006, 22:59
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Vickleby
Kontakt:

Re: Hur kommer man igång med g++?

Inlägg av Urban Anjar »

./ är den aktuella katalogen, alltså den "mapp" du "är i".
Ubuntu från början: http://ubuntufranborjan.wordpress.com/
Vill påminna om den här lilla filmen http://video.google.com/videoplay?docid ... 522818645#
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: Vilket språk bör jag lära mig?

Inlägg av Konservburk »

christer skrev:Varför just ./
Etersom det är lättast att skriva. Men det går att göra på flera andra sätt också, t.ex:

Kod: Markera allt

$(pwd)/a.out
eller

Kod: Markera allt

PATH= a.out
OBS: Det måste finnas ett mellanrum efter = om det ska fungera.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Vilket språk bör jag lära mig?

Inlägg av Johnny Rosenberg »

Konservburk skrev:
christer skrev:Varför just ./
Etersom det är lättast att skriva. Men det går att göra på flera andra sätt också, t.ex:

Kod: Markera allt

$(pwd)/a.out
eller

Kod: Markera allt

PATH= a.out
OBS: Det måste finnas ett mellanrum efter = om det ska fungera.
Just det där med ./ har jag stört mig ganska mycket på. Kring 1990 när man skrev en massa meningslös dynga i C under Unix behövdes inget sådant. Skrev man ingen sökväg så letades filen upp i både PATH och den mapp där man för tillfället befann sig. Eller är det möjligt att jag kommer ihåg så fel?

Förstår inte varför fanskapet inte kan bemöda sig att åtminstone leta i den mapp där man befinner sig utan att man ber om det. Vad skulle det kunna vara för negativt med det? Är det en säkerhetstanke som ligger bakom denna till synes löjliga begränsning?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Hur kommer man igång med g++?

Inlägg av mcNisse »

Du kan ju enkelt lägga in . i PATH. Det är är ett säkerhetshål. Det är ju därför det inte är aktiverat direkt.

Kod: Markera allt

PATH=$PATH:.
Lars
Inlägg: 6191
Blev medlem: 14 jan 2007, 19:31
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Ort: Stockholm

Re: Vilket språk bör jag lära mig?

Inlägg av Lars »

Johnny Rosenberg skrev:Är det en säkerhetstanke som ligger bakom denna till synes löjliga begränsning?
Utanför ämnet: Ja, det stämmer. Tänk dig att du kör "cd /tmp" och sedan "ls". I /tmp har alla användare skrivrättigheter så där kan man lägga in ett skript som heter ls och som gör elaka saker. OK, om "." ligger sist i PATH är det ingen fara, men man kan skapa ett elakt skript som heter l istället och vänta på att någon slinter på tangentbordet.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Vilket språk bör jag lära mig?

Inlägg av Johnny Rosenberg »

Lars skrev:
Johnny Rosenberg skrev:Är det en säkerhetstanke som ligger bakom denna till synes löjliga begränsning?
Utanför ämnet: Ja, det stämmer. Tänk dig att du kör "cd /tmp" och sedan "ls". I /tmp har alla användare skrivrättigheter så där kan man lägga in ett skript som heter ls och som gör elaka saker. OK, om "." ligger sist i PATH är det ingen fara, men man kan skapa ett elakt skript som heter l istället och vänta på att någon slinter på tangentbordet.
Men om jag, som är den enda som använder min dator, lägger till ”.” sist i PATH, så kommer det att fungera i alla fall?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Hur kommer man igång med g++?

Inlägg av mcNisse »

Det beror på vad du menar med fungera. Det finns ju ingen som kan lägga elaka skript i datorn förutom du.
Det är inget stor säkerhetsrisk.

Knepet med . sist hjälper inte mot felstavningar. Ta tex more. Det är enkelt att skrive mroe istållet.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Hur kommer man igång med g++?

Inlägg av Johnny Rosenberg »

mcNisse skrev:Det beror på vad du menar med fungera. Det finns ju ingen som kan lägga elaka skript i datorn förutom du.
Det är inget stor säkerhetsrisk.

Knepet med . sist hjälper inte mot felstavningar. Ta tex more. Det är enkelt att skrive mroe istållet.
Vad menar du hjälper mot felstavningar?
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
mcNisse
Inlägg: 5211
Blev medlem: 06 feb 2007, 20:51
OS: Debian
Utgåva: Vet inte/ingen utgåva passar

Re: Hur kommer man igång med g++?

Inlägg av mcNisse »

Stavas kommandot rätt kommer du att köra ett det program tidigare i PATH:en. Men om du skulle stava fel och någon har laggt en fil med en vanlig felstavning i aktuell katalog kommer du att köra det felstavade kommandot. Du skriver mroe istället för more och någon har laggt in ett skript mroe så kommer du att köra mroe.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: Hur kommer man igång med g++?

Inlägg av Johnny Rosenberg »

mcNisse skrev:Stavas kommandot rätt kommer du att köra ett det program tidigare i PATH:en. Men om du skulle stava fel och någon har laggt en fil med en vanlig felstavning i aktuell katalog kommer du att köra det felstavade kommandot. Du skriver mroe istället för more och någon har laggt in ett skript mroe så kommer du att köra mroe.
Okej, en teoretisk risk finns ju där, kanske. Själv brukar jag alltid titta i mappen innan jag kör något, eller på ett eller annat sätt ha koll på vad som finns där. En sak som har betydelse är, och nu pratar jag ju om mina egna filer och mappar i $HOME, att jag alltid ser till att ha relativt få filer i varje mapp. Det gör det lätt att se om något hamnat där som inte ska vara där. Kör alltid en ”ll” (alias för ls -laB) när jag just kommit till en mapp, alternativt kör ”cdl” (egendefinierad funktion för ”cd” följt av ”ll”) istället för ”cd”. Då ser jag alltid innehållet i mappen direkt så fort jag kommer dit. Jag är inte så mycket för att knappa blint utan kontroll. Men den dagen det händer att jag klantar mig, kanske det bli annat ljud i skällan…

Men än så länge har jag inte inkluderat ”.” i min PATH, har bara funderat på att göra det.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Programmering och webbdesign"