Я пытаюсь реализовать базовую структуру trie в простом старом C, и я получаю ошибку «узел не имеет члена» при компиляции.
Вот мое определение структуры:
typedef struct node {
bool word;
struct node *alpharray[26];
} node;
Мои попытки инициализировать некоторые узлы следующие:
node *root = malloc(sizeof(node));
node *nptr = malloc(sizeof(node));
nptr = root;
Приведенный выше код использует "итератор" в качестве указателя, который будет циклически проходить по заданной структуре дерева при ее создании. Вот как это работает:
while (ch != '\n' && !feof(fp))
{
//get the array index value for the current character (ch)
//getCharNum() returns an int 0-25 corresponding to a slot for a node's alpharray
int char_num = getCharNum(ch);
//if a character has not been put in the given slot yet, make a new node and point
if (nptr->alpharray[char_num] == NULL)
{
node *newnode = malloc(sizeof(node));
nptr->alpharray[char_num] = newnode;
nptr = newnode;
}
//otherwise, move the main pointer to the next node in the chain of nodes
else
{
nptr = nptr->alpharray[char_num];
}
//get the next character
fread(&ch, sizeof(char), 1, fp);
}
Ошибка, которую я получаю при компиляции, повторяется каждый раз, когда я пытаюсь получить доступ и / или изменить любой заданный атрибут узла. Я также попробовал нотацию * node.alpharray, которая, как я понимаю, эквивалентна вышеописанной, поскольку на ноду будет разыменовываться.
Я знаю, что это, наверное, что-то простое, что я упускаю из виду, но я не могу найти решение где-либо. Идеи?
Вот вывод компилятора:
gcc -ggdb -std=c99 -Wall -Werror -c -o dictionary.o dictionary.c
dictionary.c:30:15: error: expected ':', ',', ';', '}' or '__attribute__' before '=' token
dictionary.c: In function 'load':
dictionary.c:74:21: error: 'node' has no member named 'alpharray'
dictionary.c:77:21: error: 'node' has no member named 'alpharray'
dictionary.c:84:28: error: 'node' has no member named 'alpharray'
dictionary.c:71:17: error: variable 'char_num' set but not used [-Werror=unused-but-set-variable]
dictionary.c:93:16: error: 'node' has no member named 'word'
cc1: all warnings being treated as errors
make: *** [dictionary.o] Error 1