Bana somurtma yapan çözülmemiş bir dış simge hatası var. Kısacası, SDL_Surfaces ('DgSurface') için bir sarmalayıcı sınıfım ve DgSurfaces ('DgSurfaceList') yüklemek ve saklamak için bir sınıfım var. Bağlantı sorunu, projemde DgSurfaceList dosyalarını dahil etmeye çalışırken ortaya çıkar. İşte benim sınıfları şunlardır:çözümlenmemiş harici
#ifndef DGSURFACE_H
#define DGSURFACE_H
#include "SDL.h"
#include <string>
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
cpp dosyası "DgSurface.cpp" contatins DgSurface tanımları:
#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;
}
başlık dosyası "DgSurface.h" DgSurface sınıfı bildirim içeriyor
Bu sınıf iyi çalışıyor ve beklendiği gibi çalışıyor (ancak, her zaman olduğu gibi, geri bildirime açığım :). Ben DgSurfaceList dışarı yorum yaparsanız Şimdi
#include "SDL.h"
#include "SDL_image.h"
#include <list>
#include <string>
#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<DgSurface>::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()
:: getImage:
"DgSurfaceList.h" DgSurfaceList sınıf bildirimleri içerir: nihayet
#ifndef DGSURFACELIST_H
#define DGSURFACELIST_H
#include "SDL.h"
#include <list>
#include <string>
#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<DgSurface> imlist; //The list of DgSurfaces
//Functions
SDL_Surface* LoadImage(std::string filename);
};
#endif
ve "DgSurfaceList.cpp" DgSurfaceList tanımlarını içeren() cpp dosyasındaki() tanım, DgSurfaceList iyi çalışıyor ve görüntüleri doğru şekilde saklıyor. Daha spesifik olarak, bağlantı hatası sadece yukarıdaki döngüde for döngüsü içerdiğimde ortaya çıkar. Ne olabilirdi?
Diğer bilgi:
Hata:
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<class DgSurface> > >::operator*(void)const "
Kodlama ortamı: Visual C 2010
Teşekkürler, Özellikler -> C/C++ -> Kod Üretimi -> Çalışma Zamanı Kitaplığı'nı Mt Debug DLL'sine ayarlıyorum ve şimdi derleyim. Bunun neden böyle olduğundan emin değilim, ama içine bakacağım. – Frank
Ayrıca bu sorunu destek ve opencv birlikte kullanarak vardı. _DEBUG veya NDEBUG bayrakları ile ilgili olası açıklamalar var, benim durumumda bu konuda hiçbir etkisi yok. İkinize de teşekkürler. –
_DEBUG’in NDEBUG’e değiştirilmesi son baş ağrımızı çözdü. Teşekkürler! – Jon