2016-02-05 121 views
1

我已經玩了C++一段時間,剛剛開始進入SDLSDL2sdl,sdl2錯誤:SDL_window(其他)未聲明

我能夠讓dot demo program工作。

但是複製粘貼的其他程序(如Lazy Foo' Productions's)似乎不起作用。 我都SDL和安裝SDL2我在Ubuntu 15.04和我有聯繫的IDE代碼塊(-ISDL2) 的錯誤是SDL_Window(和卸載並重新安裝。) - SDL_WINDOWPOS_UNDEFINED - SDL_WINDOW_SHOWN - SDL_CreateWindow - SDL_GetWindowSurface - SDL_UpdateWindowSurface最後,SDL_DestroyWindow - - 在這方面沒有申明。

此外,我包括:

#include </usr/include/SDL/SDL.h> 
#include </usr/include/SDL2/SDL.h> 
#include <stdio.h> 

我敢肯定,我並不需要所有的位置,但它並沒有沒有,要麼工作。另一個說明,當我輸入#includes時,CodeBlocks將建議SDL2/SDL.h,但不是SDL/SDL.h

我錯過了什麼?

我不認爲我可以把懶惰富」代碼在這裏 - 我沒有獲得許可......

+0

您是否在'/ usr/include/SDL'和'/ usr/include/SDL2'中找到這些文件? – vmonteco

+0

我現在在/ usr/include /中有SDL和SDL2的文件夾。 –

回答

3

您列出的代碼;

#include </usr/include/SDL/SDL.h> 
#include </usr/include/SDL2/SDL.h> 
#include <stdio.h> 

你爲什麼不將其更改爲

#include <SDL2/SDL.h> 
#include <stdio.h> 

爲第一頭就是SDL_CreateWindow等SDL2函數聲明?

此外,您不需要同時包含SDL和SDL2標頭。事實上,這很可能是你問題的根源,因爲你只需要包含你使用的版本。

如果您正在關注lazyfoo網站的教程,您可以檢查您正在使用的教程是否從內容列表中使用SDL1.2或SDL2,因爲該網站實際上有兩個版本的教程。

UPDATE:

我沒有注意到你的平臺是Linux平臺。那麼解決你的問題就容易多了。您之前遵循的演示是使用SDL-1.2完成的,而gcc錯誤暗示您使用的是SDL-2.0,因此SDL_CreateWindow和其他未定義的錯誤。您應該安裝SDL-2.0庫和SDL-2.0開發文件(這將爲您提供必要的SDL-2.0頭文件)。您可以將其引用到由您的平臺發行版提供的SDL-2.0軟件包。

至於編譯方式,它與您通過一個小的更改(而不是gcc sdltest.o -lSDL -o sdltest)所遵循的教程相同,您將發出gcc sdltest.o -lSDL2 -o sdltest以指示您將代碼與SDL2庫鏈接。

編輯

一個簡單的SDL程序來測試您的環境。您可以使用任何簡單的文本編輯器(例如nanogedit或其他編輯器)編輯該文件,然後運行上述編譯命令以測試您的設置。

最簡單的方法是複製代碼,然後從終端發出cat > sdltest.cpp並粘貼代碼,然後按[ENTER]和[CTRL-C]結束它。然後你可以發出前面提到的編譯命令,g++ sdltest.cpp -lSDL2 -o sdltest

代碼;

#include <SDL2/SDL.h> 
#include <stdio.h> 

int main() 
{ 
    SDL_Window *p; 
    SDL_Renderer *w; 

    p = SDL_CreateWindow("Game",SDL_WINDOWPOS_UNDEFINED, 
     SDL_WINDOWPOS_UNDEFINED,800,640,SDL_WINDOW_SHOWN); 
    w = SDL_CreateRenderer(p, -1, 0); 

    SDL_RenderClear(w); 

    SDL_SetRenderDrawColor(w,255,0,0,255); 
    SDL_Rect Rect = {220,140,200,200}; 

    SDL_RenderFillRect(w,&Rect); 

    SDL_RenderPresent(w); 

    SDL_Delay(3000); 

    SDL_DestroyRenderer(w); 
    SDL_DestroyWindow(p); 
    SDL_Quit(); 
    return 0; 
} 

希望有所幫助。

+0

他需要讓編譯器在'/ usr/include'中查找include文件。此外,另一件事是你不應該把兩個不同版本的相同的API包括在內。使用SDL2並省略「SDL」包含。 – Poriferous

+0

也許如果OP可以告訴我們他的平臺,那會讓我們更容易幫助他。 – share

+0

'/ usr/include'意味着他在一個類似Unix的平臺上,特別是Linux上。另外,他的一個標籤裏面有'linux'。 :-) – Poriferous