Ошибка 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);

Объяснение кода листинга программы

  1. В коде представлены две функции: mirror_equals и is_symmetric.
  2. Функция mirror_equals принимает два указателя на узлы бинарного дерева: _left и _right.
  3. Функция is_symmetric принимает указатель на узел бинарного дерева node.
  4. В обоих функциях используется тип данных _Bool, который может принимать значения true или false.
  5. В функции mirror_equals сравниваются два узла бинарного дерева на равенство.
  6. В функции is_symmetric проверяется симметричность бинарного дерева относительно оси.
  7. В обоих функциях используется оператор == для сравнения узлов.
  8. В обоих функциях используется оператор & для получения адреса узла.
  9. В обоих функциях используется оператор -> для доступа к полям узла.
  10. В обоих функциях используется оператор nullptr для проверки на ноль.
  11. В обоих функциях используется оператор true для возврата значения true при выполнении условия.
  12. В обоих функциях используется оператор false для возврата значения false при невыполнении условия.
  13. В обоих функциях используется ключевое слово extern для объявления функции.
  14. В обоих функциях используется ключевое слово void для указания отсутствия возвращаемого значения.
  15. В обоих функциях используется ключевое слово const для указания неизменяемости аргументов функции.
  16. В обоих функциях используется ключевое слово static для объявления внутренней функции.
  17. В обоих функциях используется оператор return для возврата значения из функции.
  18. В обоих функциях используется оператор if для проверки условия.
  19. В обоих функциях используется оператор else для указания альтернативного действия.
  20. В обоих функциях используется оператор NULL для проверки на ноль.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5