C++ SDL - MVS LNK2019

Viewed 33

I've just started programming with SDL in C++ with Lazy Foo tutorials and I'm not really experienced in objective programming. I've started getting the LNK2019 Error and can't find the reason for it.

I have a class LTexture:

#pragma once
#include<string>
#include<SDL.h>
#include<SDL_image.h>
class LTexture
{
    public:
        LTexture();
        ~LTexture();
        //Loads image at specified path
        bool loadFromFile(std::string path, SDL_Renderer* _gameRenderer);
        void free();
        //Renders texture at given point
        void render(int x, int y, SDL_Renderer* _gameRenderer);
        int getWidth();
        int getHeight();
    private:
        //The actual hardware texture
        SDL_Texture* _texture;
        //Image dimensions
        int _width;
        int _height;
};

And a class AssetLoader:

#pragma once

#include <stdio.h>
#include<iostream>
#include "LTexture.hpp"

class AssetLoader
{
    public:
        //Loads media
        bool loadMedia(SDL_Renderer* _gameRenderer);        
        //Loads individual image as texture
        SDL_Texture* loadTexture(std::string path, SDL_Renderer* _gameRenderer);
        //Scene textures
        LTexture gFooTexture;
        LTexture gBackgroundTexture;

};

The errors I've been getting: Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol "public: bool __thiscall LTexture::loadFromFile(class std::basic_string,class std::allocator >,struct SDL_Renderer *)" (?loadFromFile@LTexture@@QAE_NV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@PAUSDL_Renderer@@@Z) referenced in function "public: bool __thiscall AssetLoader::loadMedia(struct SDL_Renderer *)" (?loadMedia@AssetLoader@@QAE_NPAUSDL_Renderer@@@Z)

Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol "public: __thiscall LTexture::LTexture(void)" (??0LTexture@@QAE@XZ) referenced in function "public: __thiscall AssetLoader::AssetLoader(void)" (??0AssetLoader@@QAE@XZ)

Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol "public: __thiscall LTexture::~LTexture(void)" (??1LTexture@@QAE@XZ) referenced in function __unwindfunclet$??0AssetLoader@@QAE@XZ$0

It apparently fails when it tries to call LTexture::loadFromFile function in AssetLoader::loadMedia function that looks like this:

#pragma once

#include"AssetLoader.hpp"
#include"LTexture.hpp"
bool AssetLoader::loadMedia(SDL_Renderer* _gameRenderer)
{
    //Loading success flag
    bool _success = true;

    //Load splash image
    if (!gFooTexture.loadFromFile("foo.png", _gameRenderer))
    {
        printf("Failed to load Foo texture image!\n");
        _success = false;
    }

    //Load background texture
    if (!gBackgroundTexture.loadFromFile("background.png", _gameRenderer))
    {
        printf("Failed to load background texture image!\n");
        _success = false;
    }

    return _success;
}

And the implementation of LTexture::loadFromFile is this:

#pragma once
#include"LTexture.hpp"
bool LTexture::loadFromFile(std::string path, SDL_Renderer* _gameRenderer)
{
    //Get rid of preexisting texture
    free();

    //The final texture
    SDL_Texture* _newTexture = NULL;

    //Load image at specified path
    SDL_Surface* _loadedSurface = IMG_Load(path.c_str());
    if (_loadedSurface == NULL)
    {
        printf("Unable to load image %s! SDL_image Error: %s\n", path.c_str(), IMG_GetError());
    }
    else
    {
        //Color key image
        SDL_SetColorKey(_loadedSurface, SDL_TRUE, SDL_MapRGB(_loadedSurface->format, 0, 0xFF, 0xFF));
        //Create texture from surface pixels
        _newTexture = SDL_CreateTextureFromSurface(_gameRenderer, _loadedSurface);
        if (_newTexture == NULL)
        {
            printf("Unable to create texture from %s! SDL Error: %s\n", path.c_str(), SDL_GetError());
        }
        else
        {
            //Get image dimensions
            _width = _loadedSurface->w;
            _height = _loadedSurface->h;
        }

        //Get rid of old loaded surface
        SDL_FreeSurface(_loadedSurface);
    }
    //Return success
    _texture = _newTexture;
    return _texture != NULL;
}

Please help, I really have nowhere else to ask.

0 Answers
Related