I have this header file node.h:
#ifndef NODE_H
#define NODE_H
#include <stdio.h>
#include "symboltable.h"
#include "threeaddress.h"
#include "types.h"
typedef struct NODE NODE;
typedef struct LITERALNODE LITERALNODE;
struct NODE {
INSTRUCTION code;
SYMBOL_INFO *place;
NODE *next;
NODE *previous;
};
struct LITERALNODE {
TYPE_INFO *typeInfo;
int integerValue;
char charValue;
};
LITERALNODE *generateIntegerLiteral(TYPE_INFO *typeInfo, int integerValue);
LITERALNODE *generateCharLiteral(TYPE_INFO *typeInfo, char charValue);
void concatNodes(NODE *node1, NODE *node2);
#endif
And this node.c file
#include "node.h"
#include "types.h"
LITERALNODE *generateIntegerLiteral(TYPE_INFO *typeInfo, int integerValue) {
LITERALNODE *literalNode;
literalNode->typeInfo = typeInfo;
return literalNode;
}
LITERALNODE *generateCharLiteral(TYPE_INFO *typeInfo, char charValue) {
LITERALNODE *literalNode;
literalNode->typeInfo = typeInfo;
return literalNode;
}
void concatNodes(NODE *node1, NODE *node2) {
node1->next = node2;
node2->previous = node1;
}
When I try to compile node.c I get the following errors:
node.c:4:1: error: unknown type name 'LITERALNODE'
LITERALNODE* generateIntegerLiteral(TYPE_INFO* typeInfo, int integerValue) {
^
node.c: In function 'generateIntegerLiteral':
node.c:5:2: error: unknown type name 'LITERALNODE'
LITERALNODE* literalNode;
^
node.c:6:13: error: request for member 'typeInfo' in something not a structure or union
literalNode->typeInfo = typeInfo;
^
node.c: At top level:
node.c:10:1: error: unknown type name 'LITERALNODE'
LITERALNODE* generateCharLiteral(TYPE_INFO* typeInfo, char charValue) {
^
node.c: In function 'generateCharLiteral':
node.c:11:2: error: unknown type name 'LITERALNODE'
LITERALNODE* literalNode;
^
node.c:12:13: error: request for member 'typeInfo' in something not a structure or union
literalNode->typeInfo = typeInfo;
I can't seem to spot my mistake, can anyone help me.
Also Why would the compiler comment on LITERALNODE and not on NODE, since they are constructed in exactly the same way.