2010-01-20 15 views
33

में डेटा प्रकार मैं बहुत सीदो या दो से अधिक घोषणा विनिर्देशक त्रुटि

मैं इस त्रुटि हो रही है करने के लिए नया हूँ: यहां तक ​​कि जब मैं उत्तरों के आधार पर कोड को ठीक <stdlib.h> शामिल करने के लिए

incompatible implicit declaration of built-in function ‘malloc’

, मैं अब भी मिलती है:

two or more data types in declaration specifiers

जब यह करने के लिए कोशिश कर रहा है:

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; 
} 

मैं इसे कैसे ठीक करूं?

+9

ठीक है, उचित नहीं गोलपोस्ट स्थानांतरित करने के लिए लोगों को पहले ही (सही) है के बाद अपने पहले सवाल का जवाब दे। अब उन उत्तरों का उल्लेख 'stdlib.h' जैसा दिखता है जैसे वे एक अलग प्रश्न का उत्तर दे रहे हैं। –

+1

प्रश्न को संशोधित किया गया ताकि सभी पुराने उत्तरों को अमान्य नहीं किया गया था। बाद में, @SuperString के लिए इसे ध्यान में रखना एक अच्छा विचार हो सकता है। – paxdiablo

+0

और अब यह प्रश्न Google परिणामों के शीर्ष पर पहुंचने में कामयाब रहा है। इस सवाल को इस तरह से बदलकर खराब फॉर्म। –

उत्तर

93

आप struct घोषणा के पीछे ; डाल करने के लिए है:

struct tnode 
{ 
    int data; 

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

+1। लापता ; संकलक सोचता है कि टाइप स्ट्रक्चर tnode की एक चर नामक संरचना घोषित करने की कोशिश कर रहे हैं। –

4

"अंतर्निहित घोषणा" इसका मतलब है कि आप एक समारोह है कि औपचारिक रूप से घोषित नहीं किया गया है का उपयोग करने की कोशिश कर रहे हैं।

आप शायद भूल गया: #include <stdlib.h> जो malloc के लिए समारोह घोषणा भी शामिल है।

#include "stdlib.h" 
+0

असल में इसकी एक अलग त्रुटि – SuperString

+0

लागू घोषणा का मतलब है कि आप आगे बढ़े और संकलक को समय से पहले इसके बारे में बताने के बिना एक फ़ंक्शन का उपयोग किया। तो संकलक मानता है कि फ़ंक्शन एक int देता है (यह केवल अनुमान लगा रहा है)। लेकिन मॉलोक वास्तव में शून्य * देता है, इसलिए धारणा और वास्तविकता संघर्ष। –

+8

@SuperString: कोई उचित नहीं। यह आपके मूल प्रश्न का सही उत्तर था। सही उत्तर के लिए – jamesdlin

1

सुनिश्चित करें कि आप कि) malloc के लिए परिभाषा (शामिल हेडर फाइल को शामिल किया है?

है, आपकी फ़ाइल के शीर्ष पर दर्शाने वाली पंक्ति

#include <stdlib.h> 

आशा इस मदद करता है।

2

आप उचित हेडर फाइल शामिल है:

7

आपका मूल त्रुटि क्योंकि था आप stdlib.h को शामिल किए बिना malloc उपयोग करने के लिए प्रयास कर रहे थे।

आपकी नई त्रुटि (जो वास्तव में एक अलग सवाल होना चाहिए था क्योंकि आपने अब सभी अन्य उत्तरों को अमान्य कर दिया है) क्योंकि आप struct परिभाषा के अंत में अर्धविराम चरित्र खो रहे हैं।

इस कोड को ठीक संकलित (यद्यपि एक 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; 
} 
संबंधित मुद्दे