Avatar billede svinth Nybegynder
26. september 2001 - 08:53 Der er 6 kommentarer og
1 løsning

Parameter overførsel i C

Hej C/C++ gruppe.

Se følgende kodestump:

struct en_struct
{
  unsigned long        en_struct_test;
};

struct en_anden_struct
{
  en_struct en_anden_struct_test;
};

en_anden_struct  tester[2];

void test_function (struct en_anden_struct *test1,
                          struct en_struct *test2)
{
        test2 -> en_struct_test=0;                                    /*Virker*/
        test1 -> en_anden_struct_test -> en_struct_test=0;  /*Virker ikke, programmet går ned med en exception*/
}

test_function(&tester[0],&tester[0].en_anden_struct);

Hvorfor virker det ene, men ikke det andet?

M.v.h. Svante
Avatar billede soepro Nybegynder
26. september 2001 - 09:03 #1
Enkelt: fordi en_anden_struct_test ikke er en pointer. (Får du ikke en compileringsfejl !)
:
test1->en_anden_struct_test.en_struct_test = 0;
:
burde virke. (Frygtelig navngivning min ven.)
Avatar billede svinth Nybegynder
26. september 2001 - 09:08 #2
Hej.

Jeg får ikke kompileringsfejl.
Retter jeg derimod til dit forslag får jeg:

error C2231: \'.en_struct_test\' : left operand points to \'struct\', use \'->\'
Jeg bruger MVC++6, med warning level 4.

M.v.h. Svante

PS: Og jeg der synes at navngivningen var så pædagogisk :).
Avatar billede soepro Nybegynder
26. september 2001 - 09:08 #3
Dit sidste kald er også galt:

test_function(&tester[0],&tester[0].en_anden_struct_test);

Avatar billede soepro Nybegynder
26. september 2001 - 09:10 #4
Følgende stump compilerer under C++Builder uden problemer (og virker også):

struct en_struct
{
  unsigned long        en_struct_test;
};

struct en_anden_struct
{
  en_struct en_anden_struct_test;
};

en_anden_struct  tester[2];

void test_function (struct en_anden_struct *test1,
                          struct en_struct *test2)
{
        test2->en_struct_test=0;                                    /*Virker*/
        test1->en_anden_struct_test.en_struct_test=0;  /*Virker ikke, programmet går ned med en exception*/
}
:
{
  test_function(&tester[0],&tester[0].en_anden_struct_test);
}
Avatar billede svinth Nybegynder
26. september 2001 - 09:50 #5
Hej.

Med undtagelse af følgende lille rettelse:

struct en_anden_struct
{
  struct en_struct en_anden_struct_test;
};

struct en_anden_struct  tester[2];
så kan jeg også få det til at kompilere. Nu var det jo et \'rippet\' eksempel, nu skal jeg bare finde ud af hvorfor det ikke virker i min egentlige implementation :).

Jeg tror jeg vil sige tak!

M.v.h. Svante
Avatar billede svinth Nybegynder
26. september 2001 - 09:51 #6
Hej.

Med undtagelse af følgende lille rettelse:

struct en_anden_struct
{
  struct en_struct en_anden_struct_test;
};

struct en_anden_struct  tester[2];
så kan jeg også få det til at kompilere. Nu var det jo et \'rippet\' eksempel, nu skal jeg bare finde ud af hvorfor det ikke virker i min egentlige implementation :).

Jeg tror jeg vil sige tak!

M.v.h. Svante
Avatar billede svinth Nybegynder
26. september 2001 - 13:31 #7
Ah!

Jeg var kommet til at inkludere en ældre version af headerfilen hvori struct\'sene var erklæret :).

Svante
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester