これは、ppmイメージファイルで動作するプログラムに含まれています。c - エラー:構造体または共用体でないメンバーxxxxxxを要求します。
グローバル構造変数を受け取り、そのイメージのメンバーを抽出する関数を使用しようとすると、コンパイルエラーが発生します。
これは(ppmIO.cとppmIO.hで宣言された)グローバルな構造体である:
ppmIO.c:
struct Image *instance;
ppmIO.h:
struct Image
{
int width;
int height;
unsigned char *data;
};
extern struct Image *instance;
これはどのようにあります私はメインから私の機能を呼び出す:
ImageInvert(&instance);
これらは私のimageManip.cファイルの関連する部分です:
#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++));
ないこれは私のimageManip.hファイルです
#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++));
}
}
メンバーに正しくアクセスしているか、ポインタを正しく使用しているかどうかを確認してください。
'* toInvert-> width' - >'(* toInvert) - > width' – BLUEPIXY
@BLUEPIXYのおかげ!私はすでにそれをして、ほとんどのエラーを修正しました。 – RockAndaHardPlace