Diskuze: error: incompatible type for argument 1

C a C++ C a C++ error: incompatible type for argument 1

Aktivity (1)
Avatar
bilek2petr
Člen
Avatar
bilek2petr:16. července 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. července 16:51
Avatar
ostrozan
Redaktor
Avatar
ostrozan:16. července 17:19

To je jednoduché - funkce proc

 
Nahoru Odpovědět 16. července 17:19
Avatar
ostrozan
Redaktor
Avatar
ostrozan:16. července 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. července 17:24
Avatar
Martin Dráb
Redaktor
Avatar
Odpovídá na bilek2petr
Martin Dráb:16. července 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í
+1 bodů
Řešení problému
Nahoru Odpovědět 16. července 18:50
2 + 2 = 5 for extremely large values of 2
Avatar
bilek2petr
Člen
Avatar
Odpovídá na Martin Dráb
bilek2petr:16. července 18:52

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

 
Nahoru Odpovědět 16. července 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.