Gå til innhold

Bone's Offisielle C++ hjelpetråd


Anbefalte innlegg

Videoannonse
Annonse
$ g++ funk.cpp program.cpp -o program

lars@blackbox a $ ./program

Les inn verdier til variablene a og b: 2

2

 

4

 

Eneste endringen jeg gjorde var å fjerne #include "funk.cpp" fra funk.h som du selv har gjordt/nevnt.

 

Tipper du fortsatt har prosjektet satt til Win32 Application i stedet for Console.

 

Legg inn Msys eller bruk konsollet som følger med Windows.

Lenke til kommentar

Det funka heller ikke nå selv om jeg(nå også) valgte Win32 Console Project.

PCèn er så kjip, den hopper noen ganger ut av nettet så jeg får ikke vært på noe lenge av gangen. Derfor får jeg sikkert ikke lasta ned noe heller. Den klarer f.eks ikke å ha flere programmer oppe(som oftest) noen ganger går det og.

 

Edit: En liten ting til: Hvordan klarer kompilatoren(eller er det linkeren) å finne definisjonen når jeg ikke inkluderer .cpp fila noe sted? Anntar den bare at hvis jeg har f.eks fil.h så ligger definisjonen i fil.cpp?

 

Edit: En stygg, stygg sfleif

Endret av zirener
Lenke til kommentar
En liten ting til: Hvordan klarer kompilatoren(eller er det linkeren) å finne definisjonen når jeg ikke inkluderer .cpp fila noe sted? Anntar den bare at hvis jeg har f.eks fil.h så ligger definisjonen i fil.cpp?

 

Du linker med fil.cpp - så det er linkeren som "resolver" (finner). Den antar at extern int i; ligger et annet sted ja, og at linkeren finner ut av dette siden.

 

Det der har jeg svart på egentlig.

 

Når det gjelder #include, så blir følgende linje:

#include "fil.txt"

..byttet ut med innholdet av fil.txt. Det er alt som skjer. Preprocessoren gjør dette.

 

Les det jeg har skrevet i posten ovenfor, den forklarer alt - og spør ut i fra det som står der hvis det er deler av den du ikke forstår; ikke bare spør samme spørsmålet om igjen. .. heh :p Eventuellt les de avsnittene i boka jeg linker til. Hvis du ikke forstår noe som helst av det jeg har forsøkt å forklare, kan jeg kanskje gjøre et nytt forsøk.

 

Edit:

Det kan også være lurt å titte på dette med "translation unit" i sammenheng med alt dette:

http://www.cpp.no/lars/ticpp-v1/Chapter04.html#Index1008

Endret av søppel
Lenke til kommentar
  • 1 måned senere...

Heisan! Har ennå et spørsmål på lager jeg da!

Det har med enumeration å gjøre.

 

I boka står det:

enum flag { x=1, y=2, z=4, e=8 };  // range 0:15  (det forstår jeg)
flag f2 = flag(5);    //Skjønner ikke dette.

enum e2 { a = 3, b = 9 };     // range 0:15   (skønner ikke dette heller).

I flag så ble totalsummen 15, så da har jeg en viss forståelse for at det kan bli 0:15, men summen av 3 og 9 er ikke 15. Den skjønner jeg ikke.

Og hvordan kan man egentlig gi en verdi til flag som ikke er 1,2,4 eller 8? Blir det sånn at hvis man gjør som i eksemplet så får z verdi 4 og x verdi 1?

PS: Kjeft hvis dårlig forklart!

Lenke til kommentar

Leengesiden jeg har rota med dette, så kan fort være at det ikke er helt riktig, men;

 

Det er ikke summen av enumeratorene som avgjør rekkevidden.

 

enum E1 { x = 0, y = 9 };

 

range_max = (2^n) - 1

 

Der n er et tall som gjør at range_max er mindre enn eller lik den største verdien i E1, altså 9.

 

[0 ... range_max]

.. er rekkevidden.

 

Hvis vi først prøver 2 for n blir det:

(2^2) - 1 = 3 .. 3 er mindre enn 9, så det går ikke.

 

Så prøver vi 3:

(2^3) - 1 = 7 ... som også er mindre enn 9 ..

 

Så prøver vi 4:

(2^4) - 1 = 15 .. dette er større enn 9 ..

 

Så "rangen" eller "rekkevidden" til E1 blir [0 ... 15].

 

Edit:

flag f2 = flag(5);    //Skjønner ikke dette.

 

Se på det som en cast .. altså en enumeration er en egen type (typen 'flag' i dette tilfellet), og int (5 altså) konverteres ikke implisitt til enum-typen.

 

..så flag f2 = 5; // går m.a.o. ikke.

Endret av søppel
Lenke til kommentar

takker for svar :) Må sette meg litt mer inn i dette her(litt vansklig for meg :p). Sikker på at det kommer godt med!

 

Edit: Så f2 har her da bare verdi 5?

Edit2:

Sett at vi har klassen:

enum ab { x = 3, y = 17 };

Er rekkevidden her på 31, eller er det bare jeg som har driti meg ut?

Endret av zirener
Lenke til kommentar

Okay. Det har seg slik at jeg prøver å lære meg C og leser en bok ved navn av "Sams Teach Yourself C for Linux Programming".

 

Hittil så har boken vært veldig bra, og har jeg kommet til et stykke der jeg skal skrive inn et program og deretter kjøre det. Har skrevet programmet (og til og med forbedret det bittelitt), kompilert og kjørt.

 

Problemet er slik at programmet ikke gjør det den skal. Kildekoden er her:

 

/* Demonstrates the variables and constants. */
#include <stdio.h>

/* Define the constant to convert from pounds to grams. */
#define GRAMS_PER_POUND 454

/* Define a constant for the start of the next century. */
const int TARGET_YEAR = 2010;

/* Declare the needed variables. */
int weight_in_grams, weight_in_pounds;
int year_of_birth, age_in_2010;

int main(void)
{
       /* Input data from user */

       printf("Enter your weight in pounds: ");
       scanf("%d", &weight_in_pounds);
       printf("Enter your year of birth: ");
       scanf("%d", &year_of_birth);

       /* Preform conversions */

       weight_in_grams = 1000 / (weight_in_pounds * GRAMS_PER_POUND);
       age_in_2010 = TARGET_YEAR - year_of_birth;

       /* Display results on the screen */

       printf("\nYour weight in kilograms is %d.", weight_in_grams);
       printf("\nIn 2010 you will be %d years old.\n", age_in_2010);

       return 0;
}

 

Når den regner ut vekten så får jeg alltid 0 som svar, noe som selvfølgelig er galt. Jeg lurer bare på hvor feilen ligger? (Ja, jeg har prøvd å se den, men finner den ikke).

 

Jeg lurer også på om jeg skal putte variablen "weight_in_grams" som floating point istedenfor int i og med at den som regel kommer ut som desimal når jeg regner ut til kilogram. Hva synes dere?

 

Før denne boken så prøvde jeg også å lære meg å programmere C med "The C Programming Language", noe som var laget for folk med programmeringskunnskaper fra før. I den boken så ble koden skrevet litt annerledes. F.eks. så ble det aldri brukt "int main(void), men eller "main()". Kunne kanskje noen prøve å forklare de uthevne delene ved "int main(void)"?

 

 

Mvh

Rafael Moe

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...