conflicting types for ‘方法名’ 的錯誤

     樓主新手,最近在學習Objective C,今天在看面向對象編程基礎知識時敲了一段代碼。  編程

/* 數組

 Shapes-Procedural使用的是普通的C語言和過程式編程風格。代碼的開始要定義一些常量和結構。 函數

 */ 學習

/*在強制包含了基礎頭文件以後,經過枚舉指定了能夠繪製的幾種不一樣形狀:圓形,方形和不規則的橢圓形*/ spa

#import <Foundation/Foundation.h> 對象


/*C語言枚舉的語法 ci

    typedef enum it

    { io

        枚舉值1, 編譯

        枚舉值2,

        .....

        枚舉值n

    }枚舉名稱;

 */


/*經過枚舉指定了能夠繪製的幾種不一樣形狀:圓形,方形和不規則的橢圓形*/

typedef enum

{

    kCircle,

    kRectangle,

    kOblateSpherold

}ShapeType;


/*下面的enum定義了繪製形狀時可用的顏色*/

typedef enum

{

    kRedColor,

    kGreenColor,

    kBlueColor

}ShapeColor;


/*C的Struct元素的語法

    typedef struct

    {

        結構值1;

        結構值2;

        .....

        結構值n;

    }結構名稱;

 */


/*而後,咱們使用一個結構來描述一個矩形,此矩形指定屏幕上繪製形狀的區域*/

typedef struct

{

    int x,y,width,height;

}ShapeRect;


/*最後,咱們用一個結構將全部內容結合起來,描繪一個形狀*/

typedef struct

{

    ShapeType type;

    ShapeColor fillColor;

    ShapeRect bounds;

}Shape;


/*方法:這裏邊有一個比較噁心的問題,定義方法必定要嚴格按照順序,否則就會出現 conflicting types for ‘方法名’ 的錯誤*/

NSString *colorName(ShapeColor color)

{

    switch (color) {

        case kRedColor:

            return @"red";

            break;

        case kGreenColor:

            return @"green";

            break;

        case kBlueColor:

            return @"blue";

            break;

    }

    

    return @"no clue";

}


void drawCircle(ShapeRect bounds,ShapeColor fillColor)

{

    NSLog(@"drawing a circle at (%d %d %d %d) in %@",

          bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));

}


void drawRectangle(ShapeRect bounds,ShapeColor fillColor)

{

    NSLog(@"drawing a rectangle at (%d %d %d %d) in %@",

          bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));

}


void drawOblateSpheroid(ShapeRect bounds,ShapeColor fillColor)

{

    NSLog(@"drawing a oblateSpheroid at (%d %d %d %d) in %@",

          bounds.x,bounds.y,bounds.width,bounds.height,colorName(fillColor));

}


void drawShapes(Shape shapes[],int count)

{

    int i;

    

    for(i=0;i<count;i++)

    {

        switch(shapes[i].type)

        {

            case kCircle:

                drawCircle(shapes[i].bounds, shapes[i].fillColor);

                break;

            case kRectangle:

                drawRectangle(shapes[i].bounds, shapes[i].fillColor);

                break;

            case kOblateSpherold:

                drawOblateSpheroid(shapes[i].bounds, shapes[i].fillColor);

                break;

        }

    }

}


/*在咱們的例子中,main()聲明咱們要繪製的形狀的數組。聲明數組以後,數組中的每一個形狀結構都經過分配字段而被初始化。

下面的代碼將產生一個紅色的圓形,一個綠色的矩形和一個藍色的橢圓形*/

int main(int argc, char *argv[])

{

    /*

     Shapes-Procedural程序的main()方法中的矩形時使用C語言方便的小技巧聲明的;聲明結構變量時,你能夠一次性初始化該結構的全部元素。 ShapeRect rect0(0,0,10,30);

         結構元素按照聲明的順序取值。

         

         typedef struct

         {

            int x,y,width,height;

         }ShapeRect

         

         上面對rect0的賦值表示rect0.x和rect0.y的值都爲0,rect0.width爲10,rect0.height的值爲30.

         此技巧能夠減小程序中需輸入的字符量,而且不會犧牲可讀性。

     */

    

    Shape shapes[3];

    

    ShapeRect rect0={0,0,10,30};

    shapes[0].type =kCircle;

    shapes[0].fillColor=kRedColor;

    shapes[0].bounds=rect0;

    

    ShapeRect rect1={30,40,50,60};

    shapes[1].type =kRectangle;

    shapes[1].fillColor=kGreenColor;

    shapes[1].bounds=rect1;

    

    ShapeRect rect2={15,18,37,29};

    shapes[2].type =kOblateSpherold;

    shapes[2].fillColor=kBlueColor;

    shapes[2].bounds=rect2;

    

    drawShapes(shapes, 3);

    

    return (0);

}


/*運行結果

 2012-11-11 11:53:00.115 Shapes-Procedural[813:f803] drawing a circle at (0 0 10 30) in red

 2012-11-11 11:53:00.121 Shapes-Procedural[813:f803] drawing a rectangle at (30 40 50 60) in green

 2012-11-11 11:53:00.122 Shapes-Procedural[813:f803] drawing a oblateSpheroid at (15 18 37 29) in blue

 */

    固然,這段代碼能夠正常運行,這是樓主修改後的樣子。

    以前樓主是徹底按照書本上的順序敲的,將main()的實現寫在drawShapes(),drawCircle(),drawRectangle()...以前. 結果編譯的時候出現了  conflicting types for "方法名"的錯誤。故到網上查找答案,發如今這裏須要嚴格按照函數出現的前後順序才能成功編譯,也就是main()要定義在最後,由於它是執行入口,它裏邊用到的全部對象,全部方法都須要按照順序定義在它以前,若是在這些方法裏邊還用到了方法,那麼固然還要將其餘方法定義在這些方法以前。

    樓主分享了,但願能夠幫到其餘人。

    順便祝願:「衆屌絲節日快樂」!

相關文章
相關標籤/搜索