путаница с указателем - ошибка: передача аргумента 1 'value' из несовместимого типа указателя;примечание: ожидается "...", но аргумент имеет тип "..." - PullRequest
0 голосов
/ 02 ноября 2019

РЕДАКТИРОВАТЬ: Это было так очевидно, я понятия не имею, как я не заметил. Спасибо за вашу помощь, ребята!

Я создаю таблицу символов, используя двоичное дерево в C, и застрял при определении основных функций. Мне никогда не удавалось полностью понять операции с указателями, и эти ошибки причиняют мне боль, и я не знаю, как их исправить, хотя я уверен, что многие из вас сочтут мою проблему тривиальной.

У меня есть структура, определенная так:

typedef struct SymTable {
    symbol_t *rootNode;
} symTable_t;

Функция инициализации, подобная этой:

void initTable(symTable_t *table) {
    table->rootNode = NULL;
}

И в моем main.c я вызываю функцию:

symTable_t *newTable = malloc(sizeof(symTable_t));
// check if malloc was successful
initTable(&newTable);

Он выдает эти две ошибки при попытке перевести:

main.c:12:12: error: passing argument 1 of ‘initTable’ 
from incompatible pointer type [-Werror=incompatible-pointer-types]
  initTable(&newTable);
            ^

In file included from main.c:1:0:
sym_tab.c:18:7: note: expected ‘symTable_t * {aka struct SymTable *}’ but argument is of type ‘symTable_t ** {aka struct SymTable **}’
  void initTable(symTable_t *table) {

Когда я определяю initTable () как _initTable (таблица symTable_t) _, он выдает только больше ошибок.

Спасибозаранее.

1 Ответ

1 голос
/ 02 ноября 2019

Вы передаете указатель на указатель на symTable_t вместо просто указателя на symTable_t.

Удалите & в этой строке:

initTable(&newTable);

и ошибка исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...