Avatar billede narrr Nybegynder
16. juni 2004 - 15:31 Der er 9 kommentarer og
1 løsning

Include på kryds og tværs

[main.cpp]
#include "test1.h"
#include "test2.h"

int main()
{
   
}

[test1.h]
#ifndef __test1___
#define __test1___
#include "test2.h"
class c1{
    c2 c;
};
#endif

[test2.h]
#ifndef __test2___
#define __test2___
#include "test1.h"
class c2{
    c1 c;
};

#endif


Hvis man nu som herover, har to klasser, der begge to skal bruge hinanden, og en .cpp der skal bruge begge klasser, hvordan tackler man så det? Jeg får flg. fejl:
test2.h(6): error C2146: syntax error : missing ';' before identifier 'c'
test2.h(6): error C2501: 'c2::c' : missing storage-class or type specifiers
test2.h(6): error C2501: 'c2::c1' : missing storage-class or type specifiers
Avatar billede arne_v Ekspert
16. juni 2004 - 15:33 #1
[test1.h]
#ifndef __test1___
#define __test1___
class c2; // <----
class c1{
    c2 c;
};
#endif
Avatar billede narrr Nybegynder
16. juni 2004 - 15:38 #2
Så får jeg bare:
test1.h(5): error C2079: 'c1::c' uses undefined class 'c2'.
Avatar billede arne_v Ekspert
16. juni 2004 - 15:52 #3
Hvad med:

#ifndef __test1___
#define __test1___
class c2; // <----
class c1{
    c2 c;
};
#include "test2.h"
#endif
Avatar billede segmose Nybegynder
16. juni 2004 - 15:52 #4
Jeg tror du bliver nød til at bruge pointere du ville jo få en uendelig includering i classerne (ikke i include filerne der er smukt guarded).
Avatar billede arne_v Ekspert
16. juni 2004 - 15:59 #5
!&¤#¤&%!"!

Ja - udover at få brugt korrekt forward erklæring og inkludering, så skal
klasserne også indeholde pointere til objekter og ikke objekter.
Avatar billede narrr Nybegynder
16. juni 2004 - 16:03 #6
Okay :) Hvad er det helt præcist sådan en forward erklæring(class c2;) gør? Fortæller den compileren at filen lige straks bliver inkluderet? Så man får en linkerfejl i stedet for en compiler fejl?
Avatar billede narrr Nybegynder
16. juni 2004 - 16:04 #7
.....altså hvis man glemmer at include
Avatar billede arne_v Ekspert
16. juni 2004 - 16:06 #8
Forward erklæringen gør at du kan løse problemet med at A bruger B og B bruger A.

En forward erklæring betyder "det her erklæres mere præcist senere".
Avatar billede arne_v Ekspert
09. juli 2004 - 23:42 #9
Tid at få afsluttet spørgsmålet ?
Avatar billede arne_v Ekspert
09. juli 2004 - 23:42 #10
Og et svar såfrem du kunne bruge forward erklæring oplysningerne
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