gpt4 book ai didi

c - 错误 : request for member xxxxxx in something not a structure or union

转载 作者:行者123 更新时间:2023-11-30 16:56:00 25 4
gpt4 key购买 nike

这是一个旨在处理 ppm 图像文件的程序。

当我尝试使用接受全局结构变量的函数并提取该图像的成员时,出现编译错误。

这是全局结构(在 ppmIO.c 和 ppmIO.h 中声明):

ppmIO.c:

struct Image *instance;

ppmIO.h:

struct Image
{
int width;
int height;
unsigned char *data;
};

extern struct Image *instance;

这是我从 main 调用函数的方式:

  ImageInvert(&instance);

这些是我的 imageManip.c 文件的相关部分:

#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
#include <ppmIO.h>
#include <imageManip.h>

void ImageInvert(struct Image **toInvert) {


int i;
int pix = (*toInvert->width) * (*toInvert->height);

for (i = 0; i < pix; i++)
{
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data));
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
}

}

这是我的 imageManip.h 文件:

#include <ppmIO.h>

void ImageInvert(struct Image **toInvert);

void ImageSwap(struct Image **toSwap);

这些是我得到的错误:

imageManip.c:31:23: error: request for member ‘width’ in something not a structure or union
int pix = (*toInvert->width) * (*toInvert->height);
^
imageManip.c:31:44: error: request for member ‘height’ in something not a structure or union
int pix = (*toInvert->width) * (*toInvert->height);
^
imageManip.c:35:18: error: request for member ‘data’ in something not a structure or union
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data));
^
imageManip.c:35:60: error: request for member ‘data’ in something not a structure or union
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data));
^
imageManip.c:35:67: error: expected ‘;’ before ‘)’ token
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data));
^
imageManip.c:35:67: error: expected statement before ‘)’ token
imageManip.c:36:18: error: request for member ‘data’ in something not a structure or union
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
^
imageManip.c:36:60: error: request for member ‘data’ in something not a structure or union
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
^
imageManip.c:36:69: error: expected ‘;’ before ‘)’ token
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
^
imageManip.c:36:69: error: expected statement before ‘)’ token
imageManip.c:37:18: error: request for member ‘data’ in something not a structure or union
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
^
imageManip.c:37:60: error: request for member ‘data’ in something not a structure or union
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));
^
imageManip.c:37:69: error: expected ‘;’ before ‘)’ token
*(toInvert)->data = ((unsigned char)255 - *(toInvert)->data++));

不确定我是否正确访问了成员或者是否正确使用了指针...

最佳答案

我使用括号的方式存在问题。

这是 imageInvert 函数的工作版本:

void ImageInvert(struct Image **toInvert) {


int i;
int pix = (*toInvert)->width * (*toInvert)->height;

for (i = 0; i < pix; i++)
{
(*toInvert)->data = ((unsigned char)255 - (unsigned char)(*toInvert)->data);
(*toInvert)->data = ((unsigned char)255 - (unsigned char)(*toInvert)->data++);
(*toInvert)->data = ((unsigned char)255 - (unsigned char)(*toInvert)->data++);
}

}

关于c - 错误 : request for member xxxxxx in something not a structure or union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40078453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com