c++ LNK2019: неразрешенный символ в std::vector

Я новый разработчик 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, и все должно быть хорошо!


person deery50    schedule 13.07.2015    source источник
comment
social.msdn.microsoft.com/Forums/vstudio/en-US/   -  person Severin Pappadeux    schedule 13.07.2015
comment
И было бы полезно добавить теги visual-c++ и visual-studio-20xx, где xx - год того, что вы используете   -  person Severin Pappadeux    schedule 13.07.2015
comment
Ошибка является ошибкой компоновщика, а не ошибкой компилятора или ошибкой времени выполнения. Вы не подключаете нужные библиотеки, другими словами, ваши настройки проекта компоновщика неверны. I'm trying to use a vector in a script Когда вы используете скомпилированный язык, вы не пишете сценарий. Вы пишете программу, которая будет скомпилирована в объектный код, а объектный код скомпонован вместе для создания окончательного исполняемого файла.   -  person PaulMcKenzie    schedule 13.07.2015
comment
@Severin Спасибо, я удалил DEBUG_ из определений препроцессора, и теперь оно запустит приложение, но обрывается на строке sprites[spriteID] = spriteRect с нарушением прав доступа. В будущем я буду писать посты с год моей визуальной студии, я использую 2013.   -  person deery50    schedule 13.07.2015
comment
Неважно, теперь я понимаю проблему, спасибо за помощь!   -  person deery50    schedule 13.07.2015