Nakładające się nazwy funkcji (metod)
Ostatnio zmodyfikowano 2015-03-01 17:03
fokusx Temat założony przez niniejszego użytkownika |
Nakładające się nazwy funkcji (metod) » 2015-03-01 16:23:34 Zaprogramowałem klasę, w której znajduje się metoda o nazwie "GetObject". Nazwa tej klasy to "C_ObjectManager". Niestety przy kompilacji wyświetla mi się błąd: 1> LINK : X:\ADRES\visual studio 2010\Projects\XXX\Debug\XXX.exe not found or not built by the last incremental link; performing full link 1>main.obj : error LNK2019: unresolved external symbol "public: class Object * __thiscall C_ObjectManager::GetObjectA(unsigned int)" (?GetObjectA@C_ObjectManager@@QAEPAVObject@@I@Z) referenced in function "public: void __thiscall GameManager::Initialize(void)" (?Initialize@GameManager@@QAEXXZ) 1>X:\ADRES\visual studio 2010\Projects\XXX\Debug\XXX.exe : fatal error LNK1120: 1 unresolved externals
"GetObject" została zadeklarowana w (nie moja funkcja) WinGDI.h . Istnieje jakaś możliwość by nazwa mojej metody pozostała taka jaka jest? |
|
aksen |
» 2015-03-01 16:42:04 |
|
fokusx Temat założony przez niniejszego użytkownika |
» 2015-03-01 17:02:18 hm, żaden opis - przyczyna - nie zgadza się z moim problemem. Po pierwsze, gdy zmienię nazwę metody na np. GetObjectM (w deklaracji i definicji), to działa jak należy. Po drugie, metoda posiada definicje w pliku .cpp oraz deklaracje w .h Po trzecie, przy definicji metoda ma dopisany fragment nazwy klasy (C_ObjectManager::) Może przedstawię ten fragment kodu: Plik Object.h class C_ObjectManager { public: ... Object * GetObject( unsigned int id ); ...
plik Object.cpp Object * C_ObjectManager::GetObject( unsigned int id ) { if( id < 0 || id >= c_Object.size() ) return NULL; return c_Object[ id ]; }
plik main.cpp #include <Windows.h> #include <iostream> #include "mesh.h" #include "map.h"
...
this->ObjectManager->GetObject( 0 )->rotation.v[ 0 ];
...
, gdzie ObjectManager to klasa C_ObjectManager. |
|
Monika90 |
» 2015-03-01 17:03:36 Problem polega na tym, że GetObject to jest makro zdefiniowane w wingdi.h. Dodaj dyrektywę w odpowiednim miejscu, prawdopodobnie przed definicją klasy będzie dobrze. Jeżeli gdzieś używasz GetObject jako funkcji WinAPI, to będziesz musiał używać jej pod nazwą GetObjectA lub GetObjectW, zależnie od tego czy chcesz wersję unkodową czy nie. Albo po prostu zmień nazwę metody na jakąś inną. EDIT, ponieważ widzę teraz, że masz #include <windows.h> również w pliku cpp, to tam też daj #undef GetObject, najlepiej po każdym #include <windows.h> Albo po prostu zmień nazwę metody na jakąś inną. |
|
« 1 » |