Toon posts:

[C++] unresolved external symbol

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hmmm, ik compile hier iets & ik krijg hier een paar fouten:

code:
1
2
3
4
5
6
CBeest.obj : error LNK2001: unresolved external symbol "public: __thiscall KString::operator unsigned short *(void)" (??BKString@@QAEPAGXZ)
clsBeesten.obj : error LNK2001: unresolved external symbol "public: __thiscall KString::operator unsigned short *(void)" (??BKString@@QAEPAGXZ)
clsInternet.obj : error LNK2001: unresolved external symbol "public: __thiscall KString::operator unsigned short *(void)" (??BKString@@QAEPAGXZ)
clsBeesten.obj : error LNK2001: unresolved external symbol "public: class KString __thiscall KString::LoadResString(unsigned int,int)" (?LoadResString@KString@@QAE?AV1@IH@Z)
clsBeesten.obj : error LNK2001: unresolved external symbol "public: __thiscall KString::KString(unsigned short *)" (??0KString@@QAE@PAG@Z)
clsInternet.obj : error LNK2001: unresolved external symbol "public: __thiscall KString::KString(unsigned short *)" (??0KString@@QAE@PAG@Z)


Dit heeft waarschijnlijk betrekking tot deze items:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#ifdef USE_STRING_RES
KString::KString(BSTR invoer)
{
  InitWithString( ConvertBSTRToString_( invoer ), true );
}
#endif

...

#ifdef USE_STRING_RES
KString::operator BSTR()
{
  return ConvertStringToBSTR_( _ptr );
}
#endif

#ifdef USE_STRING_RES
KString KString::LoadResString( UINT StringID, int Size )
{
  if ( Size <= 0 )
  {
    InitWithString( _strdup("") );
    return (*this);
  }

  char *tmp = new char[Size + 1];
  LoadString( programmaInstance, StringID, tmp, Size );

  InitWithString( _strdup(tmp) );
  delete tmp;

  return (*this);
}
#endif

... // class definitie

class KString
{
...
#ifdef USE_STRING_RES
  explicit KString(BSTR invoer);
#endif

...

#ifdef USE_STRING_RES
  KString LoadResString( UINT StringID, int Size = 500 );
#endif

...

#ifdef USE_STRING_RES
  operator BSTR();
#endif

...

};


Wat ik nu doe in die files is het volgende:
C++:
1
2
#define USE_STRING_RES
#include "../Library/KString.h"


Vroeger werkte dit, maar nu niet meer 8)7 .
Enig idee hoe dat kan komen en/of wat ik kan veranderd hebben dat tot dit probleem kan leiden?

Verwijderd

Je moet alle files die de KString headerfile nodig hebben/gebruiken deze define meegeven, niet alleen de KString.cpp zeg maar, maar alle files. Het beste kun je dat dus globaal regelen, bijvoorbeeld door de define aan de commandline mee te geven bij het compileren, of via een globale headerfile die overal en overal als eerste wordt geinclude. Of nog makkelijker bovenaan de headerfile bijvoorbeeld...

Verwijderd

Topicstarter
ah jah! ik snap het al...
ik gaf die mee aan KString.h, maar KString.cpp niet ofcourse!! En natuurlijk kende die dat dan niet :S :)

Verwijderd

edit:
Laat maar... Had er #infndef gelezen B-tje dislekties :? zie .oisyn :o

[ Voor 86% gewijzigd door Verwijderd op 26-04-2003 15:31 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

DaZaffiro: nee hij zegt het wel goed

In de header worden de extra functies _alleen_ gedeclareerd als USE_STRING_REF is gedefinieerd.

In de source file worden die extra functies ook alleen gedefinieers als USE_STRING_REF is gedefinieerd.

Bij de file die KString.h include wordt de macro gedefinieerd, en dus de extra functies ook. Alleen in de source staat die definitie niet, dus de implementatie wordt niet gecompiled. Resultaat: unresolved external symbols, omdat de code gebruik maakt van functies in KString die wel gedeclareerd maar niet gedefinieerd zijn

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.