Ошибка conflicting types - C (СИ)
Формулировка задачи:
Из-за чего и как ее исправить?
#include <stdbool.h>
#include <stdio.h>
#include "bst.h"
void PKL(BstNode **node, const int level);
int main(void)
{
int i, maxBFS;
char cmd[255], arg;
BstNode *root = NULL;
do
{
printf("Введите команду (h - справка):\n");
scanf("%s", cmd);
if (cmd[0] == '+')
{
scanf(" %c", &arg);
if (arg >= 'A' && arg <= 'Z')
{
bstInsert(&root, arg);
printf("Узел %c вставлен\n", arg);
}
else
printf("Ошибка. Введена недопустимая буква\n");
}
else if (cmd[0] == '-')
{
scanf(" %c", &arg);
if (arg >= 'A' && arg <= 'Z')
{
if (bstRemove(&root, arg))
printf("Узел %c удален\n", arg);
else
printf("Узел %c не найден\n", arg);
}
else
printf("Ошибка. Введена недопустимая буква\n");
}
else if (cmd[0] == 'p')
{
PKL(&root, 0);
}
else if (cmd[0] == 't')
{
if (is_symmetric(&root))
{
printf("YES");
}
else
{
printf("NO");
}
}
else if (cmd[0] == 'h')
{
printf("================================\n");
printf("Список команд:\n");
printf("+ CHAR - вставить узел CHAR (A, B, ..., Z) в двоичное дерево\n");
printf("- CHAR - удалить узел CHAR из двоичного дерева\n");
printf("p - распечатать двоичное дерево\n");
printf("t - выполнить задание над двоичным деревом\n");
printf("q - завершить программу\n");
printf("================================\n");
}
else if (cmd[0] != 'q')
{
printf("Неизвестная команда\n");
}
}
while (cmd[0] != 'q');
bstDestroy(&root);
return 0;
}
void PKL(BstNode **node, const int level)
{
if (*node == NULL)
{
printf("Дерево пусто\n");
return;
}
if ((*node)->_right != NULL)
PKL(&(*node)->_right, level + 1);
printf("%*s%c\n", level * 2, "", (*node)->_key);
if ((*node)->_left != NULL)
PKL(&(*node)->_left, level + 1);
}
_Bool mirror_equals(BstNode *_left, BstNode *_right)
{
if( _left == NULL || _right == NULL )
{return _left == NULL && _right == NULL;
return (_left->_key == _right->_key &&
mirror_equals(_left->_left, _right->_right) &&
mirror_equals(_left->_right, _right->_left) );}
}
_Bool is_symmetric(BstNode *node)
{
if( node == NULL|| mirror_equals(node->_left, node->_right))
{return true;}
else {return false;}
}3.c:111:7: error: conflicting types for ‘is_symmetric’
_Bool is_symmetric(BstNode *node)
^
3.c:53:8: note: previous implicit declaration of ‘is_symmetric’ was here
if (is_symmetric(&root))
^Решение задачи: «Ошибка conflicting types»
textual
Листинг программы
_Bool mirror_equals(BstNode *_left, BstNode *_right); _Bool is_symmetric(BstNode *node);
Объяснение кода листинга программы
- В коде представлены две функции:
mirror_equalsиis_symmetric. - Функция
mirror_equalsпринимает два указателя на узлы бинарного дерева:_leftи_right. - Функция
is_symmetricпринимает указатель на узел бинарного дереваnode. - В обоих функциях используется тип данных
_Bool, который может принимать значенияtrueилиfalse. - В функции
mirror_equalsсравниваются два узла бинарного дерева на равенство. - В функции
is_symmetricпроверяется симметричность бинарного дерева относительно оси. - В обоих функциях используется оператор
==для сравнения узлов. - В обоих функциях используется оператор
&для получения адреса узла. - В обоих функциях используется оператор
->для доступа к полям узла. - В обоих функциях используется оператор
nullptrдля проверки на ноль. - В обоих функциях используется оператор
trueдля возврата значенияtrueпри выполнении условия. - В обоих функциях используется оператор
falseдля возврата значенияfalseпри невыполнении условия. - В обоих функциях используется ключевое слово
externдля объявления функции. - В обоих функциях используется ключевое слово
voidдля указания отсутствия возвращаемого значения. - В обоих функциях используется ключевое слово
constдля указания неизменяемости аргументов функции. - В обоих функциях используется ключевое слово
staticдля объявления внутренней функции. - В обоих функциях используется оператор
returnдля возврата значения из функции. - В обоих функциях используется оператор
ifдля проверки условия. - В обоих функциях используется оператор
elseдля указания альтернативного действия. - В обоих функциях используется оператор
NULLдля проверки на ноль.