我遇到了我创建的结构的问题
typedef struct _BLOCK
{
int size;
int offset;
Block *nextBlock;
} Block;
编译器不识别* nextBlock指针的标识符
编译器似乎也没有认识到" Block"结构在程序的任何一点,我用它作为几个方法的参数和错误,如"语法错误:缺少' {'之前' *'"发生。任何见解都会有所帮助
答案 0 :(得分:1)
你错过了一个分号:
struct _BLOCK *nextBlock;
答案 1 :(得分:1)
丢失的分号并没有帮助,但是你有一个更大的问题。
在结构定义完成之后,引入了typedef名称Block
,因此您无法在nextBlock
的声明中使用它。此时您有两个选择:
struct _BLOCK
作为声明:struct _BLOCK *nextBlock;
struct _BLOCK;
typdef struct _BLOCK Block;
struct _BLOCK {
...
Block *nextBlock;
...
};
尼特:
不要为您的变量或类型名称使用前导下划线;这些名称是为实施保留的。 IOW,编译器可能出于自己的目的定义符号_BLOCK
,使用_BLOCK
可能会导致名称空间冲突。请改用struct BLOCK
或struct Block
之类的东西。
另外,在使用typedef时要明智。如果使用Block
的任何人必须知道它是struct
类型,那么您最好只使用struct Block
。以FILE
类型为例;你不是要直接操纵FILE
对象的内容,只需将指针传递给各种stdio
例程即可。作为程序员,您不需要知道内部的FILE
对象是什么样的,所以在这种情况下,将它隐藏在typedef后面是合适的。
如果使用您的Block
类型的任何人必须直接访问size
,offset
或nextBlock
成员 ,那么它就是'更好地使其struct
- 明确。 OTOH,如果您提供API来操作或访问块成员(类似于FILE
类型和stdio
例程),那么typedef是可以的。
从不隐藏typedef背后的指针。