Archief - C++: includes weergeven

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Xoliul

Legacy Member
Ik ben by far geen top-programmer, ook niet mijn doel, maar er is iets dat mij nu en dan nogal stoort. De meeste errors kun je wel op een of andere manier afleiden en oplossen uit de foutmelding, maar die waar ik altijd het meeste last mee heb, zijn linker errors. Als ik dus zo zaken doe als A include de header van B en en B include de header van A (of niet rechtstreeks met een klasse C ertussen bvb). Is er nu één of andere methode/programma wat dan ook, dat mij hierbij wat kan helpen? Iets dat een soort van diagram toont met mijn includes op, en misschien zelfs aantoont waar ik iets onmogelijk doe? Ik gebruik Visual Studio 2005.

Kreek

Legacy Member
Als je met doxygen commentaar genereert, maakt die ook diagrammen van de header files die je include, dacht ik. Dit zal waarschijnlijk wel niet de optimale oplossing zijn en er zullen betere alternatieven zijn, maar ik ehb het wel al eens gebruikt dacht ik :D

Tyfius

Legacy Member
Wat wij op het werk gebruiken om onze documentaar mee te genereren is Doxygen. Een van de handige features naast het genereren van de documentatie is dat die ook een grafiek kan weergeven van alle include files.

Nu, in principe mag het include probleem zoals jij dit beschrijft geen probleem zijn, daarvoor bestaan er de preprocessor directives die je normaal in een header file plaatst.

Xoliul

Legacy Member
Care to explain, preprocessor directives ? Hebben ze mij op school nog nooit iets over verteld.

KeaTs

Legacy Member
yup, splits altijd mooi interface en implementatie op in .h en .cpp, dan heb je vb:

class1.h
Code:
#ifndef CLASS1_H    // deze preprocessor directives voorkomen dat je interface meer dan eens include kunnen worden
#define CLASS1_H

< hier je interface >

#endif

class1.cpp
Code:
#include "class1.h"

< hier je implementatie >

Als je een class1 hebt die een class2 gebruikt en class2 gebruikt class1 ( vaak bron van circulaire dependencies ), dan gebruik je forward declarations:


class1.h
Code:
#ifndef CLASS1_H
#define CLASS1_H

class Class2;    // dit is een forward declaration van Class2, definieert gewoon het type zonder al te specificeren wat het juist doet

< hier je Class1 interface, mag pointers/references naar Class2 gebruiken maar geen methods oid >

#endif

class1.cpp

Code:
#include "class1.h"
#include "class2.h"

< hier je implementatie van Class1, die mag alles gebruiken van Class2 >

hth
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan