我遇到了矢量声明的问题
这是代码:
.H
#ifndef ANIMATEDSPRITE_H_
#define ANIMATEDSPRITE_H_
#include "Sprite.h"
#include <vector>
//using namespace std;
class AnimatedSprite //abstract class to point sprites
{
public:
AnimatedSprite();
~AnimatedSprite();
//gets and sets
Sprite GetMySprite(int _index);
void SetSpriteToList(Sprite _sprite);
int GetState() const;
void SetState(int _state);
//other
private:
std::vector<Sprite> spriteList;
int state; //estado que esse sprite representa (parado esquerda, andando direita, etc)
};
#endif
的.cpp
#include "AnimatedSprite.h"
AnimatedSprite::AnimatedSprite()
{
spriteList.clear();
state = NULL;
}
AnimatedSprite::~AnimatedSprite()
{
}
Sprite AnimatedSprite::GetMySprite(int _index)
{
return spriteList[_index];
}
void AnimatedSprite::SetSpriteToList( Sprite _sprite )
{
//Sprite* temp = new Sprite(1,2);
spriteList.push_back(_sprite);
}
int AnimatedSprite::GetState() const
{
return state;
}
void AnimatedSprite::SetState( int _state )
{
state = _state;
}
但我收到2个错误:
错误1错误LNK2019:未解析的外部符号 imp _CrtDbgReportW在函数“public:class Sprite&amp; __thiscall std :: vector&gt; :: operator [](unsigned int)”中引用“(??一个?$ vector @ VSprite @@ V?$ allocator @ VSprite @@@ std @@@ std @@ QAEAAVSprite @@ I @ Z)AnimatedSprite.obj
错误2致命错误LNK1120:1个未解析的外部C:\ DevProjects \ SDLSkeleton \ Debug \ SDLSkeleton.exe
我找到了从预处理器定义中删除_DEBUG的解决方案,但这样做似乎有点不对。
这是正确的解决方案吗?删除它的后果是什么?
在我检查的书和文件中,它应该只是一个常见的变量声明,但是这个错误出现了。
感谢。
答案 0 :(得分:3)
这是因为您的构建不一致:您定义了_DEBUG宏,但链接到版本CRT版本(/ MD)。因此,要么删除_DEBUG,要么选择/ MDd选项。