【发布时间】:2016-11-21 06:18:12
【问题描述】:
这个周末学习 C ANSI 语言的特殊性是一个相当大的挑战。
在一个练习中,我有一个头文件,其中包含一些函数签名声明。
这个引起了我的注意:
typedef struct image * Image;
我在我的 .c 文件上试过这个:
typedef struct {
char nbrMagique[10];
unsigned long imgLarg;
unsigned long imgHaut;
unsigned long imgSeuilMax;
unsigned long **imageMatrice;
} Image;
但是在编译的时候不断出错:
imagePGM.c:22:3: erreur: conflicting types for ‘Image’
} Image;
所以我猜是因为我无法重新定义 .c 文件中的结构,也无法触摸标题。
并尊重“typedef struct image * Image;”在 .h 头文件中,我必须创建一个动态二维表并将指针 *image 指向它?
我是否在反思中遗漏了什么?
但是 .h 文件中 typdef 签名中的指针 * 是什么意思?
【问题讨论】:
-
您对
Image做了两个不同的定义……一个是struct image *的typedef,另一个是未命名结构的typedef。您只能 typedef 一个名称一次。也许你的意思是你的c文件中的struct image { ...... }; -
我必须使用 struct image * Image;那肯定我不能使用第二个。但是打字机签名中的指针 * 是什么意思呢?
-
添加一些关于此的信息。上下文很可能是试图创建一个指向不完整类型的指针,有时称为不透明指针。这是在 C 中实现真正私有封装的一种方法。如果是这种情况,最好不要将其定义为指针。最好做
typedef struct image image并强制调用者使用指针语法。