|
| adgang til samme struct i alle filer i mit~ Fra : Boon |
Dato : 18-09-03 10:50 |
|
Hej
Hvordan få jeg adgang til dataen i en struct i en fil, der er lavet i en
anden fil(samme projekt)?
Der var en der sagde at jeg bare skulle smide den (structen) i en header
fil, også lave en #include til denne i begge filer. men så opretter jeg
åbenbart bare en struct i hver fil der ikke har noget at gøre med hinanden
!?!
hvordan kommer jeg ud over det problem??
mvh
Henrik
| |
Bertel Brander (18-09-2003)
| Kommentar Fra : Bertel Brander |
Dato : 18-09-03 17:03 |
|
Boon wrote:
> Hej
>
> Hvordan få jeg adgang til dataen i en struct i en fil, der er lavet i en
> anden fil(samme projekt)?
> Der var en der sagde at jeg bare skulle smide den (structen) i en header
> fil, også lave en #include til denne i begge filer. men så opretter jeg
> åbenbart bare en struct i hver fil der ikke har noget at gøre med hinanden
> !?!
>
> hvordan kommer jeg ud over det problem??
I header filen laver du typen på strukturen, f.ex:
typedef struct
{
int a;
}Whatever;
og en extern erklæring af din struct, f.ex:
extern Whatever MyWhatever;
I en af C/C++ filerne laver du selve struct'en, f.ex:
Whatever MyWhatever;
/b
| |
Jesper Matthiesen (19-09-2003)
| Kommentar Fra : Jesper Matthiesen |
Dato : 19-09-03 07:02 |
|
Hej - er der så en god forklaring på hvad 'extern' præcis betyder?
-J
"Bertel Brander" <bertel@post4.tele.dk> wrote in message
news:3f69d6d1$0$13187$edfadb0f@dread15.news.tele.dk...
> Boon wrote:
> > Hej
> >
> > Hvordan få jeg adgang til dataen i en struct i en fil, der er lavet i en
> > anden fil(samme projekt)?
> > Der var en der sagde at jeg bare skulle smide den (structen) i en header
> > fil, også lave en #include til denne i begge filer. men så opretter jeg
> > åbenbart bare en struct i hver fil der ikke har noget at gøre med
hinanden
> > !?!
> >
> > hvordan kommer jeg ud over det problem??
>
> I header filen laver du typen på strukturen, f.ex:
>
> typedef struct
> {
> int a;
> }Whatever;
>
> og en extern erklæring af din struct, f.ex:
>
> extern Whatever MyWhatever;
>
> I en af C/C++ filerne laver du selve struct'en, f.ex:
>
> Whatever MyWhatever;
>
> /b
>
| |
Troels Thomsen (19-09-2003)
| Kommentar Fra : Troels Thomsen |
Dato : 19-09-03 07:50 |
|
> Hej - er der så en god forklaring på hvad 'extern' præcis betyder?
> -J
>
Prøv i en c fil at skrive asdf = 5, det kan ikke compilere. Skriv så extern
int asdf, nu kan denne fil compilere, men projektet kan ikke linke. Min
compiler skriver noget i retning af "unresolved external".
Altså ; Du "lover" compileren at denne variabel (som ikke findes i den
pågældende c/cpp fil) vil "dukke op" på linkning-tidspunktet.
mvh Troels
| |
Boon (19-09-2003)
| Kommentar Fra : Boon |
Dato : 19-09-03 22:25 |
|
Jeg takker mange gange.. det var lige hvad jeg havde brug for, og det virker
fint. Men er der andre måder hvorpå det måske kan gøres smartere. der er
ikke et must at det skal være en struct jeg skal bruge. det var bare det jeg
forestillede mig. Den skal bare indeholde int, char og måske bool typer.
"Bertel Brander" <bertel@post4.tele.dk> wrote in message
news:3f69d6d1$0$13187$edfadb0f@dread15.news.tele.dk...
> Boon wrote:
> > Hej
> >
> > Hvordan få jeg adgang til dataen i en struct i en fil, der er lavet i en
> > anden fil(samme projekt)?
> > Der var en der sagde at jeg bare skulle smide den (structen) i en header
> > fil, også lave en #include til denne i begge filer. men så opretter jeg
> > åbenbart bare en struct i hver fil der ikke har noget at gøre med
hinanden
> > !?!
> >
> > hvordan kommer jeg ud over det problem??
>
> I header filen laver du typen på strukturen, f.ex:
>
> typedef struct
> {
> int a;
> }Whatever;
>
> og en extern erklæring af din struct, f.ex:
>
> extern Whatever MyWhatever;
>
> I en af C/C++ filerne laver du selve struct'en, f.ex:
>
> Whatever MyWhatever;
>
> /b
>
| |
Bertel Brander (19-09-2003)
| Kommentar Fra : Bertel Brander |
Dato : 19-09-03 23:25 |
|
Boon wrote:
> Jeg takker mange gange.. det var lige hvad jeg havde brug for, og det virker
> fint. Men er der andre måder hvorpå det måske kan gøres smartere. der er
> ikke et must at det skal være en struct jeg skal bruge. det var bare det jeg
> forestillede mig. Den skal bare indeholde int, char og måske bool typer.
>
Jeg er ikke sikker på at jeg forstår spørgsmålet.
Du kan lave det samme med int, char, bool, osv. Så skriver du i
header filen:
extern int MyInt;
og i en af c/c++ filerne:
int MyInt;
I c++ kan du også bruge class.
/b
PS: Nogen laver en header fil der ser ud som følger:
#ifndef EXTERN
#define EXTERN extern
#endif
EXTERN int MyInt;
Og i en af c/c++ filene skriver man så:
#define EXTERN
#include "myheader.h"
I de andre c/c++ filer inkluderer man blot "myheader.h".
Der er nogen der synes at det er smartere. Hvis du ikke
forstår hvad der foregår, vil jeg anbefale dig at holde
dig fra metoden.
| |
Boon (20-09-2003)
| Kommentar Fra : Boon |
Dato : 20-09-03 15:22 |
|
Hej
Jeg forstår udmærket dit svar og det virker også fint hos mig. Det jeg
tænkte på var om der var andre måde hvorpå man kan lave noget ala struct..
jeg tænker her på er arrays, union og hvad de nu hedder. jeg har ikke så
meget erfaring med disse. men det kun jo være at det er nogle af dem der er
bedre som globale datatypes.
mvh
Henrik
> Der er nogen der synes at det er smartere. Hvis du ikke
> forstår hvad der foregår, vil jeg anbefale dig at holde
> dig fra metoden.
| |
Bertel Brander (20-09-2003)
| Kommentar Fra : Bertel Brander |
Dato : 20-09-03 19:21 |
|
Boon wrote:
> Hej
> Jeg forstår udmærket dit svar og det virker også fint hos mig. Det jeg
> tænkte på var om der var andre måde hvorpå man kan lave noget ala struct..
> jeg tænker her på er arrays, union og hvad de nu hedder. jeg har ikke så
> meget erfaring med disse. men det kun jo være at det er nogle af dem der er
> bedre som globale datatypes.
>
Hvis man har brug for et array laver man et array, har man brug for
en int laver man en int, har man brug for en union tænker man sig lige
om igen og laver en union, har man brug for en struct laver man en
struct, har man brug for ...
Der er ikke nogen datatyper der er bedre end andre som globale data
typer.
Hvis man programerer i C++ kan man bruge class, og pakke variablen
ind, man starter med header-filen:
class MyIntClass
{
public:
MyIntClass(int i) : MyInt(i) {}
int Get() {return MyInt;}
void Set(int i) {MyInt = i;}
private:
int MyInt;
};
Extern MyIntClass MyInt;
Og i en af C++ filerne
MyIntClass MyInt(0);
Man kan så bruge MyInt på følgende måde:
int n = MyInt.Get();
n++;
MyInt.Set(i);
Der er nogen der synes at det er "pænere".
/b
| |
|
|