2015-09-30 47 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;