Fehler bei zwei oder mehr Datentypen im Deklarationsbezeichner [closed]

Lesezeit: 3 Minuten

Benutzeravatar von SuperString
SuperString

Ich bin ziemlich neu in C.

Ich bekomme diesen Fehler:

inkompatible implizite Deklaration der eingebauten Funktion ‘malloc’

Auch wenn ich den Code anhand der Antworten behebe, die ich einbeziehe <stdlib.h>bekomme ich noch:

zwei oder mehr Datentypen in Deklarationsbezeichnern

Wenn Sie dies versuchen:

struct tnode
{
    int data;
    struct tnode * left;
    struct tnode * right;
}

struct tnode * talloc(int data){
    struct tnode * newTnode;
    newTnode = (struct tnode *) malloc (sizeof(struct tnode));
    newTnode->data = data;
    newTnode->left = NULL;
    newTnode->right = NULL;
    return newTnode;
}

Wie kann ich es beheben?

  • Ok, es ist nicht fair, die Torpfosten zu verschieben, nachdem die Leute Ihre erste Frage bereits (richtig) beantwortet haben. Jetzt diese Antworten erwähnen stdlib.h sehen aus, als würden sie eine andere Frage beantworten.

    – Greg Hewgill

    20. Januar 2010 um 4:21 Uhr

  • Die Frage wurde so geändert, dass alle früheren Antworten nicht ungültig wurden. Könnte eine gute Idee sein, das für später im Hinterkopf zu behalten, @SuperString.

    – paxdiablo

    20. Januar 2010 um 4:27 Uhr

  • Und nun hat es diese Frage an die Spitze der Google-Ergebnisse geschafft. Schlechte Form, diese Frage teilweise zu ändern.

    – Sudo-Bash

    29. August 2016 um 22:13 Uhr

Du musst setzen ; Hinter struct Erklärung:

struct tnode
{
    int data;

    struct tnode * left;
    struct tnode * right;
}; // <-- here

  • +1 für die richtige Antwort. Das fehlende ; lässt den Compiler glauben, dass versucht wird, eine Variable namens struct vom Typ struct tnode zu deklarieren.

    – Johannes Knöller

    20. Januar 2010 um 4:22 Uhr

Ihr ursprünglicher Fehler war, weil Sie versucht haben, zu verwenden malloc ohne einzubeziehen stdlib.h.

Ihr neuer Fehler (der eigentlich eine separate Frage hätte sein sollen, da Sie jetzt alle anderen Antworten für ungültig erklärt haben) liegt daran, dass Ihnen am Ende von ein Semikolon fehlt struct Definition.

Dieser Code lässt sich gut kompilieren (allerdings ohne eine main):

#include <stdlib.h>

struct tnode
{
    int data;

    struct tnode * left;
    struct tnode * right;
};

struct tnode * talloc(int data){
    struct tnode * newTnode;
    newTnode = (struct tnode *) malloc (sizeof(struct tnode));
    newTnode -> data = data;
    newTnode -> left = NULL;
    newTnode -> right = NULL;
    return newTnode;
}

“Implizite Deklaration” bedeutet, dass Sie versuchen, eine Funktion zu verwenden, die nicht formal deklariert wurde.

Sie haben wahrscheinlich vergessen: #include <stdlib.h> die die Funktionsdeklaration für enthält malloc.

  • eigentlich ist es ein anderer Fehler

    – SuperString

    20. Januar 2010 um 4:14 Uhr

  • Implizite Deklaration bedeutet, dass Sie eine Funktion verwendet haben, ohne den Compiler im Voraus darüber zu informieren. Der Compiler geht also davon aus, dass die Funktion ein int zurückgibt (es ist nur eine Vermutung). Aber malloc gibt tatsächlich void* zurück, also widersprechen sich Annahme und Realität.

    – Matt Greer

    20. Januar 2010 um 4:15 Uhr

  • @SuperString: Nicht fair. Es war die richtige Antwort auf Ihre ursprüngliche Frage.

    – jamesdlin

    20. Januar 2010 um 4:28 Uhr

Haben Sie die entsprechende Header-Datei enthalten?

Das heißt, gibt es eine Zeile oben in Ihrer Datei, die besagt

#include <stdlib.h>

Hoffe das hilft.

Stellen Sie sicher, dass Sie die Header-Datei eingefügt haben, die die Definition für malloc() enthält:

#include "stdlib.h"

1390390cookie-checkFehler bei zwei oder mehr Datentypen im Deklarationsbezeichner [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy