unresolved external symbols mit der STL... Warum?



  • Hallo,

    ich weiß nicht, ob dieses das korrekte Forum ist. Mein problem ist eher so ein Mischmasch von WinAPI und der STL.

    Folgendes Szenario:

    Ich schreibe mir gerade einen kleinen Tetris-Clone mit reiner WinAPI. Natürlich purer Terror, aber das soll jetzt mal egal sein :).

    Die einzelnen Klötze des Tetris-Steins sind in einer Klasse gekapselt. Dann habe ich in der Stein-Klasse einen std::vector<CSquare*>. So weit, so gut.
    Die einzelnen Klötze werden dann mit ihren "logischen" Koordinaten per push_back in den Vektor eingefügt.

    Der Compiler beschwehrt sich auch nicht, syntaktisch scheint das alles zu stimmen. Nur... leider meckert der Linker ein bischen rum und ich weiß nicht wieso.

    1>LINK : warning LNK4098: defaultlib 'LIBCMT' conflicts with use of other libs; use /NODEFAULTLIB:library
    1>Stone.obj : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "public: class CSquare * const & __thiscall std::_Vector_const_iterator<class CSquare *,class std::allocator<class CSquare *> >::operator*(void)const " (??D?$_Vector_const_iterator@PAVCSquare@@V?$allocator@PAVCSquare@@@std@@@std@@QBEABQAVCSquare@@XZ)
    1>libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
    1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __malloc_dbg referenced in function "void * __cdecl operator new(unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??2@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
    1>libcpmtd.lib(xdebug.obj) : error LNK2019: unresolved external symbol __free_dbg referenced in function "void __cdecl operator delete(void *,struct std::_DebugHeapTag_t const &,char *,int)" (??3@YAXPAXABU_DebugHeapTag_t@std@@PADH@Z)
    

    Die Warnung ist wohl ernst zu nehmen 🙂
    Aber ich frage mich, warum ich diese ganzen Fehler bekomme. Liegt das daran, dass ich ein WinAPI Projekt habe, oder liegt es an mir?

    Für Hilfe wäre ich dankbar.

    Hier die Klasse CStone mit dem Vektor + Konstruktor:

    // CStone.h
    #include <vector>
    #include "Square.h"
    
    class CStone
    {
    public:
    	CStone(int _id);
    	~CStone(void);
    private:
    	std::vector<CSquare*> squares;
    };
    
    // CStone.cpp
    CStone::CStone(int _id) :
    squares()
    {
    	// id auswerten...
    }
    
    // Oder gibt es hier Probleme?
    CStone::~CStone(void)
    {
    	typedef std::vector<CSquare*>::iterator It_PSquare;
    
    	for (It_PSquare i = squares.begin(); i < squares.end(); i++)
    	{
    		delete (*i);
    		squares.pop_back();
    	}
    }
    


  • Du linkst gegen irgendeine 3rd-Party-LIB, welche mit einer anderen Einstellung bzgl. CRT erstellt wurde (also z.B: mit /MT anstelle von /MD).
    Also entweder Du passt Deine Anwendung an oder die LIB.



  • Eigentlich nicht. Habe das Projekt ganz normal erstellt und "ausgebaut". An den Libs habe ich gar nichts verändert.


Anmelden zum Antworten