2012-05-05 51 views
4

我有一个程序,我正在写这是一个基本的图像绘图程序。 它是C.错误与typedef C2275错误结构

Initialy我声明

typedef struct 
{ 
    int red; 
    int green; 
    int blue; 
} pixel_colour; 

我有一个函数来填充它接受这个所以使用它像的背景。

pixel_colour flood_colour = {80,50,91}; 
FloodImage(flood_colour); 

现在,如果它是我的主要的唯一的事情,但只要我添加了一个开关/箱和我的代码的其余部分我可以不再使用pixel_colour flood_colour = {80,50,91};

而不是让

能正常工作
error C2275: 'pixel_colour' : illegal use of this type as an expression 
1>   c:\users\xxxx\documents\visual studio 2010\projects\xxx.c(20) : see declaration of 'pixel_colour' 

主要代码如下,它正常工作与我的所有功能,直到我尝试使用pixel_colour,它会被设置为变量,而不是200200200但即使不工作

char instring[80] = "FL 201 3 56"; 
    int pst = FirstTwo(instring); 
    switch(pst) 
    { 
    case 1: 
    printf("FL "); 
    CaseFL(instring); 
    pixel_colour flood_colour = {200,200,200}; 
    FloodImage(flood_colour); 
    break; 

    case 2: 
    printf("LI"); 
    break; 

    case 3: 
    printf("RE"); 
    break; 

    case 4: 
    printf("CH"); 
    break; 

    case 5: 
    printf("FI");  
    break; 

    case 6: 
    printf("EX");  
    exit(EXIT_FAILURE); 
    break; 

    default : 
    printf("Something went wrong"); 

    break; 
    } 

回答

7

在C89中,受MSVC支持,您只能在代码块的开头声明一个变量。相反,你可以这样做:

case 1: 
{ 
    // first thing in the block - variable declaration/initialization 
    pixel_colour flood_colour = {200,200,200}; 
    printf("FL "); 
    CaseFL(instring); 
    FloodImage(flood_colour); 
    break; 
} 

C99,C11和C++都允许根据需要声明变量。

+0

好的,谢谢,我忘记了.... 但我想从CaseFL返回的像素声明实体声明,我可以这样做吗? – user1376199

+1

感谢您对它进行排序:) 刚把它包裹在{} – user1376199

+0

@Jonathan - 感谢您的编辑,下次我会尽量做到更精确。 – MByD