Я новый разработчик C++, но раньше программировал на более простых языках. Я пытаюсь использовать вектор в сценарии, и я не понимаю эту ошибку до такой степени, что я действительно не знаю, что делать, чтобы отладить ошибку. Я делаю подобные публикации о LNK2019 и векторах, но ни один из других ответов, похоже, не применим к этой проблеме. Поскольку я только учусь, может быть что-то принципиально неправильное в моем понимании C++ и векторов.
ошибка LNK2019: неразрешенный внешний символ __imp___CrtDbgReportW, указанный в функции "public: struct SDL_Rect & __thiscall std::vector >::operator[](unsigned int)" (??A?$vector@USDL_Rect@@V?$allocator@USDL_Rect@ @@std@@@std@@QAEAAUSDL_Rect@@I@Z)
Я создаю экземпляр std::vector в моем заголовочном файле SpriteSheet.h:
#pragma once
#include <SDL.h>
#include <SDL_image.h>
#include <stdio.h>
#include <vector>
class SpriteSheet {
public:
SpriteSheet(SDL_Texture* texture); //Defines a SpriteSheet from the file location.
~SpriteSheet();
void free();
int getWidth();
int getHeight();
SDL_Texture* getTexture();
void defineSprite(int StartX, int StartY, int sizeX, int sizeY, int spriteID);
void renderSprite(SDL_Renderer* renderer, int spriteID, SDL_Rect* destR);
private:
SDL_Texture* texture; //Sheet texture
//Dimensions
int width;
int height;
std::vector<SDL_Rect*> sprites;
};
SpriteSheet.cpp:
#include "SpriteSheet.h"
SpriteSheet::SpriteSheet(SDL_Texture* texture) {
this->texture = texture;
}
SpriteSheet::~SpriteSheet() {
}
void SpriteSheet::defineSprite(int StartX, int StartY, int sizeX, int sizeY, int spriteID) {
SDL_Rect* spriteRect = new SDL_Rect;
spriteRect->x = StartX;
spriteRect->y = StartY;
spriteRect->w = sizeX;
spriteRect->h = sizeY;
sprites[spriteID] = spriteRect;
}
void SpriteSheet::free() {
if (texture != NULL) {
SDL_DestroyTexture(texture);
texture = NULL;
width = 0;
height = 0;
}
}
void SpriteSheet::renderSprite(SDL_Renderer* renderer, int spriteID, SDL_Rect* destR) {
SDL_RenderCopy(renderer, texture, sprites[spriteID], destR);
}
int SpriteSheet::getWidth() {
return width;
}
SDL_Texture* SpriteSheet::getTexture() {
return texture;
}
int SpriteSheet::getHeight() {
return height;
}
Я сузил его, и ошибка, похоже, возникает в файле SpriteSheet.cpp в строке, которая говорит «sprites[spriteID] = spriteRect;»
РЕДАКТИРОВАТЬ: Проблема теперь исправлена. Если вы используете Visual Studio Express, перейдите к
Проект->(Проект) Свойства->C/C++->Препроцессор
Отредактируйте определения препроцессора и удалите _DEBUG из списка определений. Затем нажмите OK, и все должно быть хорошо!
visual-c++
иvisual-studio-20xx
, где xx - год того, что вы используете - person Severin Pappadeux   schedule 13.07.2015I'm trying to use a vector in a script
Когда вы используете скомпилированный язык, вы не пишете сценарий. Вы пишете программу, которая будет скомпилирована в объектный код, а объектный код скомпонован вместе для создания окончательного исполняемого файла. - person PaulMcKenzie   schedule 13.07.2015