2012-05-05 50 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