2010-09-15 16 views
6

मैं इस में शामिल फ़ाइल (memory .h)त्रुटि: से पहले की उम्मीद ')' '*' टोकन

#ifndef MEMORY_H 
#define MEMORY_H 

#ifdef __cplusplus 
extern "C" { 
#endif 

    typedef struct mmemory { 
     int* cells; 
     int* current_cell; 
     int cells_number; 
    } memory; 

    void memory_init(memory* mymemory, int size); 
    void step_left(memory* mymemory, int steps); 
    void step_right(memory* mymemory, int steps); 
    void cell_inc(memory* mymemory, int quantity); 
    void print_cell(memory* mymemory); 
    void get_char(memory* mymemory); 


#ifdef __cplusplus 
} 
#endif 

#endif /* MEMORY_H */ 

और यह कार्यान्वयन फ़ाइल (memory.c)

#include <stdlib.h> 
#include "memory.h" 

void 
memory_init (memory* mymemory, int size) 
{ 
    mymemory->cells = (int*) malloc (sizeof (int) * size); 
    mymemory->cells_number = size; 
    mymemory->current_cell = (int*) ((mymemory->cells_number/2) * sizeof (int)); 
} 
... //other function definitions follow 

जब मैं memory.c मैं संकलन करने की कोशिश की है प्रत्येक त्रुटि परिभाषा

src/memory.c:5: error: expected ')' before '*' token

के लिए यह त्रुटि प्राप्त करें 210 जहां लाइन 5 memory_init()

क्या कोई मुझे बता सकता है कि मुझे यह त्रुटि क्यों मिल रही है?

+0

क्या संकलक/मंच? – abelenky

+0

ओएसएक्स हिम तेंदुए पर जीसीसी संस्करण 4.2.1, -ansi स्विच –

+2

के साथ हो सकता है कि आपके हेडर को शामिल करने से पहले कुछ अन्य शीर्षलेख पहले से ही MEMORY_H को परिभाषित कर चुके हैं? – Dirk

उत्तर

14

क्योंकि सिस्टम memory.h आपके memory.h को छाया दे रहा है, जिससे #include आपके प्रकारों को घोषित किए बिना सफल हो सकता है। कई संभावित सुधार:

  • संभावित फ़ाइल को कम करने के लिए, संभवतः किसी भी मामले में सर्वश्रेष्ठ के लिए अपनी फ़ाइल का नाम बदलें।
  • उपसर्ग उपनिर्देशिका (उदा।, #include <myproj/memory.h>) के माध्यम से अपनी फ़ाइल शामिल करें।
  • अपनी फ़ाइल को स्रोत फ़ाइल के समान निर्देशिका में ले जाएं, " में लिपटे फ़ाइल नामों के लिए प्राथमिकता नियमों को प्रभावी बनाने के लिए अनुमति दें।
  • सुनिश्चित करें कि आपके सी प्री-प्रोसेसर में पथ विकल्प सिस्टम हेडर पथ से पहले आपके प्रोजेक्ट हेडर पथ को शामिल करते हैं।
+0

क्या वह इतना बेवकूफ मुद्दा था? हाँ यह था। धन्यवाद :-) –

+0

भविष्य की समस्याओं से बचने के लिए, क्या मानक सी शीर्षलेख नामों के लिए त्वरित संदर्भ है? –

+0

@klez यह एक मौजूदा प्रश्न प्रतीत होता है: http://stackoverflow.com/questions/2027991/list-of-standard-header-files-in-c-and-c। इस मामले में, मानकों से संबंधित सूचियों ने मदद नहीं की होगी, क्योंकि 'memory.h' मानक शीर्षलेख नहीं है। आप हमेशा देख सकते हैं कि आपका विशेष ओएस 'ढूंढें/usr/include/-type f -name' * .h'' जैसे कुछ प्रदान करता है। – llasram

3

यह उत्तर वास्तव में देर हो चुकी है, लेकिन मुझे एक ही समस्या का सामना करना पड़ा।

मैं आपकी समस्या आपके फ़ाइल जहाँ आप एक struct मिमी एमोरी घोषित लिखने में कोई गलती से संबंधित है लगता है। यदि आप उस अतिरिक्त 'एम' को हटाते हैं तो इसे काम करना चाहिए।

+3

आपका उत्तर वास्तव में देर हो चुकी है और समस्या यह नहीं थी :-) वैसे भी धन्यवाद –

-1

अपने कोड में आप memory.h

#ifndef MEMORY_H 
#define MEMORY_H 
... 
... 
#endif 

के लिए इस तरह परिभाषित किया है मामले में जो आप अपनी परियोजना में उपयोग करने के लिए अपने अन्य फ़ाइलों में से किसी एक ही #define यानी MEMORY_H तो आप प्राप्त कर सकते हैं इस त्रुटि हो रही है ।

समाधान:

#ifndef XYZ_MEMORY_H 
#define XYZ_MEMORY_H 
... 
... 
#endif 
संबंधित मुद्दे