作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是一个旨在处理 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/
我是一名优秀的程序员,十分优秀!