非类型错误

时间:2013-09-24 08:15:43

标签: c class member

#define MAXLINELENGTH   8192

 struct Image {
unsigned int height;
unsigned int width;
unsigned int value;
unsigned int maxValue;
unsigned int data[MAXLINELENGTH];
 };


 Image *Image_Init ()
 {
    Image *tmpImage;
    unsigned int data[MAXLINELENGTH];
    //if(tmpImage != NULL)

    //{
    tmpImage->height = 0;
    tmpImage->width = 0;
    tmpImage->value = 0;
    tmpImage->maxValue = 0;
 for (int i = 0; i < MAXLINELENGTH; i++)
{
    tmpImage -> data[i] = data[i];
}
//tmpImage.data = {};
//return &tmpImage;
//}

return tmpImage;
   }

unsigned int    Image_Get_Height (Image *img)
 {
Image *tmpImage;
int UINT_MAX;
UINT_MAX = tmpImage.height;

//int UINT_MAX;
//UINT_MAX = img.height;
return UINT_MAX;
}

发生错误,我不知道如何修复它。

c:73:错误:请求'tmpImage'中的成员'height',这是非类型'Image *'

请帮助解决此错误。

2 个答案:

答案 0 :(得分:1)

Image *tmpImage;
/* ... */
UINT_MAX = tmpImage.height;

这里有两个问题。第一个是语法错误,您点.来访问结构指针的成员,因此您应该使用->

第二个问题更严重,那就是你将使用一个未初始化的指针,它可能(并且可能会)在运行程序时导致崩溃。

答案 1 :(得分:1)

UINT_MAX是标准的DEFINE,它是一个不可修改的值,即使int UINT_MAX无效,因为UINT_MAX将被实现的最大整数值替换,所以你会说

unsigned int    Image_Get_Height (Image *img)
 {
    Image *tmpImage;
    int 4294967295;
    4294967295= tmpImage.height;

    //int UINT_MAX;
    //UINT_MAX = img.height;
    return 4294967295;
}

这是无效的;)

它本身的错误只是说你试图通过点.访问结构指针成员什么是不对的,因为它有->运算符访问,如Joachim Pileborg所说他的回答。