NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: error: incompatible type for argument 1

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
bilek2petr
Člen
Avatar
bilek2petr:16.7.2017 16:51

Dobrý den,
Mám implementaci ale hlásí chybu. Nevíte někdo co změnit prosím?

41 error: incompatible type for argument 1 of 'proc'

Tady implementace

void Tree_Inorder(TreeNode * root, TreeNodeProc proc) {
    if (root != NULL) {
        Tree_Inorder(root->left, proc);
        proc(root);
        Tree_Inorder(root->right, proc);
    }
}

Hlavičkový soubor (výtažek)

#ifndef _TREE_H_
#define _TREE_H_

#include "data.h"
#include <stdbool.h>
#include <stddef.h>

/*!
 * \brief Datová struktura listu stromu.
 */
typedef struct _TreeNode {
    Data_t  data;                               /**< Data listu stromu */
    struct _TreeNode * left;    /**< Ukazatel na levý list stromu */
    struct _TreeNode * right;   /**< Ukazatel na pravý list stromu */
} TreeNode;

/*!
 * \brief Datová struktura stromu.
 */
typedef struct _Tree {
        TreeNode * root;                /*< Ukazatel na kořen stromu */
        bool delete_contents;   /*< S mazáním uzlu stromu smaž také jeho data */
} Tree;

/*!
 * \brief Způsob průchodu stromem.
 */
typedef enum _TreeProcessMode {
    procPREORDER = 1,           /**< Data uzlu jsou zpracována před oběma jeho listy (= uzly budou zpracovány od kořene k listům) */
    procINORDER = 2,            /**< Nejprve zpracuj levý list, poté data a poté pravý list (= uzly budou zpracovány v seřazeném pořadí) */
    procPOSTORDER = 3           /**< Data uzlu jsou zpracována až po obou jeho listech (= uzly budou zpracovány od listů ke kořeni) */
} TreeProcessMode;

/*!
 * \brief Callback funkce pro zpracování uzlu při průchodu stromem.
 * \param Ukazetel na rodičovský strom zpracovávaného uzlu
 * \param Ukazatel na zpracovávaný uzel
 */
typedef void (*TreeNodeProc)(Tree node);
 
Odpovědět
16.7.2017 16:51
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:16.7.2017 17:19

To je jednoduché - funkce proc

 
Nahoru Odpovědět
16.7.2017 17:19
Avatar
ostrozan
Tvůrce
Avatar
ostrozan:16.7.2017 17:24

nebere jako parametr ukazatel na TreeNode její deklaraci jsi sem ale nedal, takže si musíš zjistit co tam má být

 
Nahoru Odpovědět
16.7.2017 17:24
Avatar
Martin Dráb
Tvůrce
Avatar
Odpovídá na bilek2petr
Martin Dráb:16.7.2017 18:50

Problém tkví v tom, že voláš funkci v proměnné proc typu TreeNodeProc, které předáváš odkaz na uzel stromu (TreeNode * ), ale v deklaraci má, že požaduje strom (Tree). Oprav deklaraci na

typedef void (*TreeNodeProc)(TreeNode *node);

a mělo by to jít (myslím, že jsi to tak stejně původně zamýšlel).

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
16.7.2017 18:50
2 + 2 = 5 for extremely large values of 2
Avatar
bilek2petr
Člen
Avatar
Odpovídá na Martin Dráb
bilek2petr:16.7.2017 18:52

Jawohl! To je přesně ono, díky

 
Nahoru Odpovědět
16.7.2017 18:52
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.