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()要定义在最后,由于它是执行入口,它里边用到的全部对象,全部方法都须要按照顺序定义在它以前,若是在这些方法里边还用到了方法,那么固然还要将其余方法定义在这些方法以前。

    楼主分享了,但愿能够帮到其余人。

    顺便祝愿:“众屌丝节日快乐”!

相关文章
相关标签/搜索