2014-02-07 19 views
0

我已經決定進入C++,並且一直在嘗試使用SDL,類和頭文件。 我這裏有一個頭文件:無法解析的外部符號錯誤(VS2013 Express)

class loaders 
{ 
public: 
loaders(); 
SDL_Surface * load_image(const char imageName[], SDL_PixelFormat *format); 
}; 

而CPP文件在這裏:

#include <SDL.h> 
#include <SDL_image.h> 
#include <iostream> 
//COMMENT 
class loaders 
{ 
public: 
    loaders() 
    { 
     if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG) 
     { 
      std::cout << IMG_GetError(); 
     } 
    } 
    SDL_Surface * load_image(const char imageName[], SDL_PixelFormat *format) 
    { 
     SDL_Surface * returnSurface = nullptr; 
     returnSurface = IMG_Load(imageName); 
     if (returnSurface != NULL) 
     { 
      return SDL_ConvertSurface(returnSurface, format, NULL); 
     } 
     else 
     { 
      std::cout << "Image load failed." << IMG_GetError() << std::endl; 
      return NULL; 
     } 

    } 
}; 

我知道的錯誤意味着鏈接器無法找到的東西,但我不能爲我的生活,找出它是什麼。這可能很小,所以我認爲另一雙眼睛會有所幫助。

+0

什麼是錯誤? –

+0

錯誤錯誤LNK2019:函數「public:__thiscall Window :: Window(void)」中引用的未解析外部符號「public:__thiscall loaders :: loaders(void)」(?? 0loaders @@ QAE @ XZ) ?0Window @@ QAE @ XZ)\t C:\ Users \ Kevin \ Source \ Workspaces \ SDL Checkers \ SDL Checkers \ SDL Checkers \ main.obj \t SDL Checkers – MadDoctor5813

回答

2

您的實現文件應該使用它自己的頭文件作爲類聲明。你只需要在loaders.cpp定義成員函數,就像這樣:

#include <SDL.h> 
#include <SDL_image.h> 
#include <iostream> 
#include "loaders.h" 

loaders::loaders() 
{ 
    if (IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG) 
    { 
     std::cout << IMG_GetError(); 
    } 
} 

SDL_Surface * loaders::load_image(const char imageName[], SDL_PixelFormat *format) 
{ 
    SDL_Surface * returnSurface = nullptr; 
    returnSurface = IMG_Load(imageName); 
    if (returnSurface != NULL) 
    { 
     return SDL_ConvertSurface(returnSurface, format, NULL); 
    } 
    else 
    { 
     std::cout << "Image load failed." << IMG_GetError() << std::endl; 
     return NULL; 
    } 
} 

在項目中包含該實現文件,並編譯所有的源在使用相同的標誌(默認情況下),您的項目。然後,編譯器將對所有對構造函數的引用使用相同的調用約定和名稱修飾,並且鏈接器將所有對象文件放在可執行文件中時將找到該符號。

相關問題