2015-09-30 46 views
-3

我使用這個基本的程序來學習打印屏幕。C主要表達式 - 它是否是主要表達式?

我收到以下錯誤,當我運行應用程序:

error: expected primary expression before '=' token"

#include "SDL.h" 
#include <stdio.h> 
#define window 
using namespace std; 
const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 
int main(int argc, char* args[]) 
{ 
    SDL_Surface* screenSurface =NULL; 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL could not initialize! SDL_Error: %s\n",SDL_GetError()); 
    } 
    else 
    { 
     window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    } 
    if(window==NULL) 
    { 
     window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    } 
} 
+2

什麼是'window'?你是否可以請嘗試創建一個[最小化,完整和可驗證示例](http://stackoverflow.com/help/mcve)並向我們展示? –

+0

當然。這裏是 #include「SDL.h」 #include #define window using namespace std; const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main(int argc,char * args []) { SDL_Surface * screenSurface = NULL; (SDL_Init(SDL_INIT_VIDEO)<0) printf(「SDL無法初始化!SDL_Error:%s \ n」,SDL_GetError()); } 別的 { 窗口= SDL_CreateWindow( 「SDL教程」,SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREEN_WIDTH,SCREEN_HEIGHT,SDL_WINDOW_SHOWN); } if(window == NULL) – raedon707

+1

哦,請*編輯您的問題*以顯示代碼。 :) –

回答

5

預處理很簡單,當它有一個宏它替換宏的是

例如,如果你有

#define window 

則預處理器將取代符號windows所有出現的什麼

所以對於聲明

window = SDL_CreateWindow(...); 

它看起來像這樣預處理

= SDL_CreateWindow(...); 

這是很難有效的代碼之後。

如果您打算爲window是一個變量,一個指向SDL_Window,那麼你應該把它定義爲這樣的:

SDL_Window *window; 

刪除預處理器宏。


我同意這裏的術語略有混淆。您可以使用預處理器定義宏,然後你就可以定義變量,結構,功能等,還可以聲明變量,結構,功能等

預處理是這聽起來像。它曾經是一個單獨的程序,它讀取一個源文件,在其上執行處理(如宏替換和包含文件包含),然後吐出一個編譯器隨後使用的臨時文件。現在,預處理器可以內置到編譯器中,並作爲完整編譯過程的一部分在早期階段運行。大多數編譯器允許您輸出預處理的源代碼以供您查看,我建議您嘗試使用代碼執行此操作。爲預處理器定義的宏不在提供給編譯器的源代碼中,這些行由預處理器刪除。

然後是變量的定義等。這與預處理器宏的定義完全不同。變量定義告訴編譯器「這裏是一個名稱爲this-and-that,某種類型的變量,請分配內存來存儲變量」。

變量聲明與定義類似,但它只告訴編譯器「有一個變量名爲this-and-that,某種特定類型,它存在於某處」。

變量可以既申報,並在同一時間定義,例如

void function(void) 
{ 
    int a; // Declares and defines the variable 
    ... 
} 
+0

夥計..我做了什麼,你說..現在它顯示「SDL_Window不命名一個類型SDL_Window *窗口「 現在要做什麼.. :( – raedon707

+0

找到它的定義,幷包括適當的標題 – deimus

0

修改你的程序是這樣的:

#include "SDL.h" 
#include <stdio.h> 
using namespace std; 

const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 
SDL_Window *window; 
int main(int argc, char* args[]) 
{ 
    SDL_Surface* screenSurface =NULL; 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL could not initialize! SDL_Error: %s\n",SDL_GetError()); 
    } 
    else 
    { 
     window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    } 
    if(window==NULL) 
    { 
     window = SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
    } 
} 
+0

它不工作..現在它說」SDL_Window不命名類型SDL_Window *窗口「.... ??! – raedon707

0

變化

#define window 

SDL_Window * window;