gpt4 book ai didi

c - 精心创建的结构抛出 "dereferencing pointer to incomplete type"错误

转载 作者:行者123 更新时间:2023-11-30 14:35:55 29 4
gpt4 key购买 nike

当我尝试访问其成员函数时,我有一个结构抛出“取消引用指向不完整类型的指针”错误。我没有创建该结构,而是我的教授创建的,因此我有理由确信,如果正确访问,它将完美地工作。这是代码:

Pixel.h(由教授创建):

#ifndef PIXEL_H
#define PIXEL_H

#include <stdbool.h>
#include <stdio.h>

#define BYTES_PER_PIXEL 3

typedef struct
{
unsigned char R;
unsigned char G;
unsigned char B;
}Pixel;

Pixel.c(同样由教授创建):

#include "Pixel.h"

bool readFromFile(FILE* inputFile, Pixel* newPxl)
{
// Irrelevant code
return false;
}

bmpFilter.c(主文件)(由我创建):

#include <stdio.h>
#include <stdlib.h>
#include "Pixel.h"

int main(int argc, char* argv[])
{
// Irrelevant code, inputFile initialized
struct Pixel* pix;
pix = malloc(sizeof(pix));

pix->readFromFile(inputFile, pix);
}

错误:

bmpFilter.c: In function ‘main’:
bmpFilter.c:33:5: error: dereferencing pointer to incomplete type ‘struct Pixel’
pix->readFromFile(inputFile, pix);

该错误几乎肯定是在 bmpFilter 中,但到目前为止我一直无法找到如何修复它。

最佳答案

您没有声明struct Pixel。您声明了一个匿名结构,并将其 typedef 单独编辑为 Pixel。将 struct 的声明更改为:

typedef struct Pixel // <-- Added name for struct
{
unsigned char R;
unsigned char G;
unsigned char B;
}Pixel;

或者当你使用它时,只需将变量声明为:

Pixel* pix;

鉴于 Pixel 的定义来自您的教授(并且您可能不允许更改它),我建议只更改 struct Pixel* pix;Pixel* pix; 以匹配提供的代码。

您的另一个问题是您执行 pix->readFromFile(inputFile, pix);; pix 不包含名为 readFromFile 的函数指针(即使包含,malloc struct 意味着指针将是垃圾)。您的意思是调用全局函数:

readFromFile(inputFile, pix);  // No pix-> needed

关于c - 精心创建的结构抛出 "dereferencing pointer to incomplete type"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58279332/

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