Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C++] Linker problemen

Pagina: 1
Acties:

  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
hallo allemaal,

ik heb een zeer vaag linker probleem. Even een situatie schets: ik heb een Main.h file met een bijbehorende Main.cpp. deze heeft op het moment alleen een main functie en hij trekt de header MapParser.h binnen. Deze MapParser.h bevat een MapParser class net als in de bijbehorende file MapParser.cpp. Deze header trekt op zijn beurt weer een Engine.h file binnen. Deze bevat een hele zooi aan templated classes. Verder trekken deze files allemaal alleen standard libraries binnen en ik gebruik overal header guards.
Dan nu het probleem: als ik dit compile krijg ik een link error dat 1 specifieke class (die ik niet aanroep is namelijk een error class die ik nog even neit gebruik) al gedefined is in MapParser.obj (error doet zich voor in Main.obj).
Dit is raar omdat ik ten eerste die hele class niet gebruik en ten tweede omdat die hele engine maar 1 keer binnengetrokken wordt door MapParser.h. de hele main trekt die niet binnen. Heeft iemand ideeën hoe ik dit het beste kan aanpakken want ik weet het niet meer. Als ik de engine.h uitcomment in MapParser dan is de error weg. Een ander project die de engine ook include heeft dit probleem niet en die gebruikt de class op welke de error slaat wel. |:( ik include nergens dubbel, wat is hier de beste aanpak om het op te lossen?

EDIT: code linkje

EDIT2: nou het lijkt erop dat het alleen fout gaat als ik de engine.h in een ander header reference dan in main.h. dus als ie dieper dan 1 laag zit gaat het mis. is dit een compiler bug ofzo?

[ Voor 8% gewijzigd door williewonka03 op 05-12-2014 15:05 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 20-11 11:59

NMe

Quia Ego Sic Dico.

En nu moeten we dat raden op basis van een onsamenhangende lap tekst?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
NMe schreef op vrijdag 05 december 2014 @ 13:54:
En nu moeten we dat raden op basis van een onsamenhangende lap tekst?
nou ik vroeg me af of iemand een goed idee had hoe ik dit aan kan pakken. en wat is er onsamenhangend.
main.h
|
-- mapparser.h
|
---- engine.h

en bij main.obj zegt ie dat 1 class die ik neit gebruik uit engine.h al bestaat in mapparser.obj. maar main.cpp doet niks atm.

  • DLGandalf
  • Registratie: Maart 2005
  • Laatst online: 06-11 18:28
plemp je code op github oid, dit is idd niet echt te volgen.

  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
DLGandalf schreef op vrijdag 05 december 2014 @ 14:26:
plemp je code op github oid, dit is idd niet echt te volgen.
ok here you go

  • ErikKo
  • Registratie: Mei 2009
  • Laatst online: 16:13

ErikKo

Rippie

*klik*
Access Denied (content_filter_denied)

Your request was denied because of its content categorization: "File Storage/Sharing"

For assistance, contact your network support team.
;(

Edit: Oh. pastebin mag niet van mijn werkgever. :+

[ Voor 6% gewijzigd door ErikKo op 05-12-2014 14:55 ]


  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
ErikKo schreef op vrijdag 05 december 2014 @ 14:53:
[...]

*klik*

[...]

;(

Edit: Oh. pastebin mag niet van mijn werkgever. :+
heb je dm gestuurd met code

  • Elijan9
  • Registratie: Februari 2004
  • Laatst online: 20-11 15:32
Op het moment dat (class) functies in een header file gedefinieerd worden, dien je er "inline" voor te zetten, zo dus:
C++:
160
161
162
163
164
165
inline AtlasError::AtlasError(int type, std::string c_message)
        :runtime_error("AtlasEngine Error")
{
        _type = type;
        _custom = c_message;
}


Anders wordt de AtlasError constructor (en ander functies in de header) elke keer dat deze header file wordt gëinclude mee gecompileerd.

War is when the young and stupid are tricked by the old and bitter into killing each other. - Niko Bellic


  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
Elijan9 schreef op vrijdag 05 december 2014 @ 15:18:
Op het moment dat (class) functies in een header file gedefinieerd worden, dien je er "inline" voor te zetten, zo dus:
C++:
160
161
162
163
164
165
inline AtlasError::AtlasError(int type, std::string c_message)
        :runtime_error("AtlasEngine Error")
{
        _type = type;
        _custom = c_message;
}


Anders wordt de AtlasError constructor (en ander functies in de header) elke keer dat deze header file wordt gëinclude mee gecompileerd.
aha dat wist ik niet. moet dat alleen voor function declaration of ook bij definition?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
williewonka03 schreef op vrijdag 05 december 2014 @ 15:48:
aha dat wist ik niet. moet dat alleen voor function declaration of ook bij definition?
Alleen bij de definition. Als je een member functie in de classdefinitie zelf definieert is hij impliciet inline.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • williewonka03
  • Registratie: Augustus 2010
  • Laatst online: 16-06-2024
farlane schreef op vrijdag 05 december 2014 @ 16:28:
[...]


Alleen bij de definition. Als je een member functie in de classdefinitie zelf definieert is hij impliciet inline.
bedankt!
Pagina: 1