[VC.net (C++)] Linking error met inline

Pagina: 1
Acties:

  • The End
  • Registratie: Maart 2000
  • Laatst online: 06:37

The End

!Beginning

Topicstarter
Ik heb een object gemaakt. Daarin zitten drie functies die inline zijn. Alle drie de functies hebben geen parameters. 1 returned een bool, 1 returned een DWORD en 1 returned een INT_PTR (gewoon int dus)

Ik krijg nu tijdens het linken een lijst van errors. LNK2001 en LNK2019 voor alle drie de functies.

Als ik dit doe krijg ik de errors:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<MyFile.h>
class MyObject
{
public:
    inline DWORD ReturnValue();
protected:
    DWORD Value;
}

<MyFile.cpp>

/* inline */ DWORD MyObject::ReturnValue()
{
    return Value;
}


Volgens de MSDN kan je een functie impiciet inline maken door de definitie in de header file op te nemen. Op die manier krijg ik de linking errors niet:

code:
1
2
3
4
5
6
7
8
<MyFile.h>
class MyObject
{
public:
    inline DWORD ReturnValue() { return Value };
protected:
    DWORD Value;
}


Heeft iemand enig idee waarom dit zo is en hoe ik dit kan oplossen. Ik gebruik binnen mijn project op meer plaatsen inline en daar gaat het wel goed...

  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

Volgens mij mag je geen inline in een source file gebruiken... Compiler zou dan object code moeten inlinen. Het kan ervoor als je definitie in je header staat, maar buiten je class.

  • The End
  • Registratie: Maart 2000
  • Laatst online: 06:37

The End

!Beginning

Topicstarter
Zoijar schreef op vrijdag 11 maart 2005 @ 10:20:
Volgens mij mag je geen inline in een source file gebruiken... Compiler zou dan object code moeten inlinen. Het kan ervoor als je definitie in je header staat, maar buiten je class.
In andere objecten in mijn project werkt het wel. Het enige verschil is dat in dit object de functies public zijn en in de andere objecten protected.

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 10-05 10:05
Als je wil inlinen moet de definitie bekend zijn door een aanroepende functie. Dat kan alleen als de definitie en de declaratie beide 'geinclude' worden.

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.


  • Zoijar
  • Registratie: September 2001
  • Niet online

Zoijar

Because he doesn't row...

The End schreef op vrijdag 11 maart 2005 @ 10:25:
In andere objecten in mijn project werkt het wel. Het enige verschil is dat in dit object de functies public zijn en in de andere objecten protected.
Ja, daar zit een verschil in linker exports in, dus dat zou kunnen. Maar ik weet even niet met zekerheid te zeggen wat de standaard hierover zegt, en geen zin om te zoeken; Salters zal het wel uit z'n hoofd weten en hier zo langskomen :)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Schijn bedriegt, access heeft er niks mee te maken. Het juiste antwoord is dat de definitie van een inline funcite aanwezig moet zijn in alle files die de functie daadwerkelijk aanroepen. In de praktijk: definitie in de header.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • The End
  • Registratie: Maart 2000
  • Laatst online: 06:37

The End

!Beginning

Topicstarter
MSalters schreef op vrijdag 11 maart 2005 @ 12:44:
Schijn bedriegt, access heeft er niks mee te maken. Het juiste antwoord is dat de definitie van een inline funcite aanwezig moet zijn in alle files die de functie daadwerkelijk aanroepen. In de praktijk: definitie in de header.
Vandaar dus dat de protected inline functies wel werken :) Die worden alleen aangeroepen in de file waarin ze zijn gedefinieerd.

Dank allen voor de antwoorden.
Pagina: 1