[vc++ en dll's] class forward declaration

Pagina: 1
Acties:

  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
Ik heb nu het volgende:

een .dll wordt gebouwd en een .lib. Ik heb 1 class, maar die maak gebruikt van twee andere classes.

Omdat te voorkomen dat de gebruiker alledrie de header files moet hebben, heb ik forward declaraties van de classes boven die ene gezet;

dus:

C++:
1
2
3
4
5
6
7
8
9
class A;
class B;

class C
{
...
A* a;
B* b;
}


De headerfiles zijn geinclude in de c-file van de class 'C'. Daar worden in de constructor a en b gemaakt met een 'new' commando.

Compiled allemaal fijn en zo, maar als ik nu gebruik probeer te maken van a of b in een programma waar ik de headerfile van class C in include, bijv op de manier c.a->IsWindowVisible()' (het is een dialog), zegt hij:

error C2027: use of undefined type 'A'
d:\<C.h>(11) : see declaration of 'A'

en verwijst hij hier naar die forward declaratie.
Moet hij niet gewoon de definitie zien in de .lib file die ik meegekoppeld heb?

[ Voor 13% gewijzigd door Boy op 03-08-2005 11:26 ]

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04-05 12:47

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, de compiler moet de definitie weten wanneer je gebruik maakt van het type. Type-informatie haalt een compiler niet uit libraries, sterker nog, de compiler doet helemaal niets met libraries (template exports daargelaten, voor de nittpickers ;)). Alleen de linker leest libraries om alle unreferenced external symbols te includen in de uiteindelijke executable.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
.oisyn schreef op woensdag 03 augustus 2005 @ 11:28:
Nee, de compiler moet de definitie weten wanneer je gebruik maakt van het type. Type-informatie haalt een compiler niet uit libraries, sterker nog, de compiler doet helemaal niets met libraries (template exports daargelaten, voor de nittpickers ;)). Alleen de linker leest libraries om alle unreferenced external symbols te includen in de uiteindelijke executable.
Maar ik wil de gebruiker de headerfiles van die twee classes niet meegeven. Ben ik dit dan toch verplicht als ik twee pointers naar die classes aanmaak in die class C?

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 04-05 12:47

.oisyn

Moderator Devschuur®

Demotivational Speaker

Als de gebruiker A en B moet gebruiken, of dit nou via C gaat of niet, dan zal je dat idd moeten doen ja.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Boy
  • Registratie: November 2001
  • Laatst online: 04-05 17:24

Boy

www.byoscoop.nl

Topicstarter
.oisyn schreef op woensdag 03 augustus 2005 @ 11:31:
Als de gebruiker A en B moet gebruiken, of dit nou via C gaat of niet, dan zal je dat idd moeten doen ja.
Hmm, dan ga ik maar wat extra functies bouwen waarmee hij indirect toegang heeft tot a en b en niet direct het object kan aanspreken

Naar de bioscoop? => gebruik de app op Byoscoop.nl


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Je kan je .dll een functie geven die een nieuw A of B object creeert en een pointer daarnaar terug geeft. Die pointer sla je dan op in je C class. Je moet dan wel ook een dll functie maken die die ponter weer delete, want dat kan je niet vanuit je C class doen omdat het memory runtime model van de dll en de applicatie misschien verschillend zijn (andere c runtime bv)

(je kan hem dan nog steeds noiet rechtstreeks gebruiken; maar zoek een op het "pimpl idiom", pointer-to-implementation, ofwel compiler firewall)

[ Voor 17% gewijzigd door Zoijar op 03-08-2005 11:52 ]

Pagina: 1