externo no resuelto

Tengo un error de símbolo externo no resuelto que me está volviendo loco. En resumen, tengo una clase de contenedor para SDL_Surfaces (‘DgSurface’) y una clase para cargar y almacenar DgSurfaces (‘DgSurfaceList’). El problema del enlace surge cuando se intenta incluir los archivos DgSurfaceList en mi proyecto. Aquí están mis clases:

El archivo de encabezado “DgSurface.h” contiene la statement de clase DgSurface:

#ifndef DGSURFACE_H #define DGSURFACE_H #include "SDL.h" #include  class DgSurface { public: //Constructor/destructor DgSurface(std::string N, SDL_Surface* I): image(I), name(N) {} DgSurface() {name = ""; image = NULL;} ~DgSurface(); //Copy operations DgSurface(const DgSurface&); DgSurface& operator= (const DgSurface&); //Data members std::string name; //The name of the image SDL_Surface* image; //The image }; #endif 

El archivo cpp “DgSurface.cpp” contiene las definiciones de DgSurface:

 #include "DgSurface.h" #include "SDL.h" //-------------------------------------------------------------------------------- // Constructor //-------------------------------------------------------------------------------- DgSurface::DgSurface(const DgSurface& other) { //Copy name name = other.name; //Create new SDL_Surface image = SDL_ConvertSurface(other.image, other.image->format, 0); } //-------------------------------------------------------------------------------- // Destructor //-------------------------------------------------------------------------------- DgSurface::~DgSurface() { SDL_FreeSurface(image); } //-------------------------------------------------------------------------------- // Assignment operator //-------------------------------------------------------------------------------- DgSurface& DgSurface::operator= (const DgSurface& other) { // if same object if ( this == &other ) return *this; //Copy name name = other.name; //Create new SDL_Surface image = SDL_ConvertSurface(other.image, other.image->format, 0); return *this; } 

Esta clase parece funcionar bien y funciona como se espera (sin embargo, como siempre, estoy abierto a comentarios :).

“DgSurfaceList.h” contiene declaraciones de clase DgSurfaceList:

 #ifndef DGSURFACELIST_H #define DGSURFACELIST_H #include "SDL.h" #include  #include  #include "DgSurface.h" class DgSurfaceList { public: //Constructors/destructor DgSurfaceList() {} ~DgSurfaceList() {} //Functions bool AddImage(std::string location, std::string name); //Return Functions SDL_Surface* GetImage(std::string S) const; private: //Data members std::list imlist; //The list of DgSurfaces //Functions SDL_Surface* LoadImage( std::string filename ); }; #endif 

y finalmente, “DgSurfaceList.cpp” contiene definiciones DgSurfaceList:

 #include "SDL.h" #include "SDL_image.h" #include  #include  #include "DgSurface.h" #include "DgSurfaceList.h" //-------------------------------------------------------------------------------- // Load an image from file //-------------------------------------------------------------------------------- SDL_Surface* DgSurfaceList::LoadImage( std::string filename ) { //Loads an image from file, returns SDL_surface* ... } //End:DgSurfaceList::LoadImage() //-------------------------------------------------------------------------------- // Add a DgSurface to the list //-------------------------------------------------------------------------------- bool DgSurfaceList::AddImage(std::string location, std::string name) { //Load the image DgSurface temp(name,LoadImage(location)); //If there was an error in loading the image if( temp.image == NULL ) return false; //If everything loaded fine, place a copy into imlist imlist.push_back(temp); return true; } //End: DgSurfaceList::AddImage(); //-------------------------------------------------------------------------------- // Searches imlist for an image, returns a pointer to a SDL_Surface //-------------------------------------------------------------------------------- SDL_Surface* DgSurfaceList::GetImage(std::string S) const { std::list::const_iterator i; //Search imlist for DgSurface of the same name for (i = imlist.begin(); i != imlist.end(); i++) { if (S.compare((*i).name) == 0) return (*i).image; } //Return Null if name not found return NULL; } //End:DgSurfaceList::GetImage() 

Ahora, si comento la definición DgSurfaceList :: GetImage () en el archivo cpp, DgSurfaceList parece funcionar bien y almacenar las imágenes correctamente. Más específicamente, el error de enlace solo surge cuando incluyo el bucle for en la función anterior. ¿Qué podría ser?

Otra información:

Error:

 unresolved external symbol __imp___CrtDbgReportW referenced in function "public: class DgSurface const & __thiscall std::_List_const_iterator<class std::_List_val<class DgSurface,class std::allocator > >::operator*(void)const " 

Entorno de encoding: Visual C ++ express 2010

CrtDbgReport se define solo en la versión de depuración de la biblioteca de tiempo de ejecución de C. Quizás esté comstackndo en modo de depuración pero enlazando con la versión de lanzamiento de la biblioteca. Otra posibilidad es que esté comstackndo en modo de lanzamiento, pero que alguna macro que ha definido está causando la comstackción de la versión de depuración de std :: list.