我在我的程序中遇到了一个问题,我在这个问题中定义了一个结构类型但不是一个结构变量。
typedef struct
{
int a;
int b;
int c;
Token d;
} Foo;
然后我想在.c文件中使用这个结构foo
,该文件将中缀作为后缀
#include "header"
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <stdlib.h>
int infix2postfix(char *infix, Arr arr)
{
struct Foo foo;
char szToken[MAX_TOKEN];
Stack stack = newStack();
infix = getToken(infix, szToken, MAX_TOKEN); //provides next token to be scanned by function.
... //push pop using switch case didn't post code for simplicity.
case...
push(stack, *foo.a);
...
case...
pop(stack);
...
goOut(arr, *foo.d); //goOut(function that populates and "arr" Array from printing.
}
所以当我在这里编译时,我得到了
error: storage size of ‘foo’ isn’t known struct Foo foo;
我已尝试struct Foo *foo = malloc(sizeof foo);
分配内存,但它弄乱了我的push(stack, *foo.a);
和goOut(arr, *foo.d);
如何解决这个问题?我是否必须首先在infix2postfix
函数中分配内存然后声明一个结构变量?
答案 0 :(得分:1)
你已经将Foo定义为typedef结构,所以你不再使用struct Foo来声明foo,只需使用 Foo foo;声明不是struct Foo foo;
答案 1 :(得分:1)
您定义了一种类型Foo
,它是无标记的struct
类型。您可以使用与struct Foo { int anonymous; char name[MAX_NAME]; };
类型完全无关的单独Foo
。 (这对人类来说会非常混乱,但编译器没有问题。)
在你的函数中,你应该写:
int infix2postfix(char *infix, Arr arr)
{
Foo foo;