2012-12-28 18 views
9

मैं भर के अन्य धागे किसी भी तरह इस से संबंधित पर तलाश रहे हैं, लेकिन किसी भी तरह मैं सिर्फ यह नहीं मिलता है 'असंगत सूचक प्रकार [डिफ़ॉल्ट रूप से सक्षम] से' तर्क गुजर ...चेतावनी:

मैं मूल्यों के एक सेट पर कुछ एफएफटी करना चाहते हैं, मैंने मूल्यांकन किया है और इस कार्यक्रम को पहले मूल्यों को पढ़ने और उन्हें n आकार की सरणी में सहेजने के लिए लिखा है।

int main() { 
    // some variables and also a bit of code to read the 'messwerte.txt' 

printf("Geben sie an wieviele Messwerte ausgelesen werden sollen: "); 
scanf("%d", &n); 
double werte[n]; //Array der "fertigen" Messwerte 
in = fopen ("messwerte.txt","r"); 
double nul[n]; //Array von nullen 

int logN = 14; 
l=FFT(logN,&werte,&nul); 
} 

एक ही फाइल मैं भी इस कार्यक्रम की मदद से FFT कर में:

double FFT (int logN, double *real, double *im) //logN is base 2 log(N) { 
// blabla FFT calculation 
} 

हालांकि, जब मैं संकलन मैं हमेशा इस त्रुटि मिलती है:

gcc FFT.c -lm 
FFT.c: In function ‘main’: 
FFT.c:94:2: warning: passing argument 2 of ‘FFT’ from incompatible pointer type [enabled by default] 
FFT.c:4:8: note: expected ‘double *’ but argument is of type ‘double (*)[(unsigned int)(n)]’ 
FFT.c:94:2: warning: passing argument 3 of ‘FFT’ from incompatible pointer type [enabled by default] 
FFT.c:4:8: note: expected ‘double *’ but argument is of type ‘double (*)[(unsigned int)(n)]’ 

इस के बाद से मेरा पहला समय प्रोग्रामिंग है, मैं वास्तव में नहीं जानता कि मेरे कोड में क्या गलत है। क्या मुझे कंपाइलर या उस तरह की चीजों के लिए और झंडे सेट करना होगा (क्योंकि मुझे यह -lm सामान करना था या यह संकलित नहीं होगा और ऐसा कुछ नहीं मिलेगा जैसे पाउ नहीं मिला या नहीं)?

मुझे यह भी पता चला कि विंडोज या लिनक्स मशीन पर लिखते समय कोई अंतर हो सकता है, और मैं ओएस की समस्या होने पर लिनक्स, लुबंटू 12.10 32-बिट का उपयोग कर रहा हूं।

उत्तर

7

werte[] और nul[] सरणी हैं, लेकिन werte शब्द स्वयं सरणी के पहले तत्व का पता है। तो जब आप &werte करते हैं तो आप पते के पते को पारित करने का प्रयास कर रहे हैं (जैसा कि @cnicutar ने इंगित किया है, यह वास्तव में एन तत्वों की एक सरणी में सूचक को पढ़ना चाहिए)। इसलिए इन arrays के पते को पारित करने के लिए एम्पर्सेंड संकेतों के बिना बस werte और nul पास करें।

+1

* जब आप करते हैं और आप पते के पते को पारित करने का प्रयास कर रहे हैं * वास्तव में नहीं। और werte एक ही पते पैदा करता है, लेकिन एक अलग प्रकार के साथ। – cnicutar

+1

क्षमा करें। किसी पते पर पता नहीं, मैं 2 डी सरणी में पहले तत्व के पते के लिए उचित शब्द ढूंढ रहा था (जिसे आप देख सकते हैं, स्वयं में थोड़ा समझ में आता है)। हालांकि मुझे इसे आपके उत्तर में रखने का सही तरीका मिला। : डी – varevarao

11
l=FFT(logN,&werte,&nul); 
     ^ ^

उस लाइन से ड्रॉप एम्पर्सेंड।


समस्या यह है कि इस संदर्भ में & ऑपरेटर क्या FFT उम्मीद की तुलना में एक अलग प्रकार के साथ एक अभिव्यक्ति उत्पादन होता है। एफएफटी उम्मीद करता है कि एक सूचक को डबल और &werte एन तत्वों की एक सरणी के लिए एक सूचक बनाता है। इसलिए, FFT खुश करने के लिए, बस werte पास करें जो चुपचाप पहले तत्व को पॉइंटर को क्षय कर देगा।

एरे के पॉइंटर्स पर अधिक जानकारी के लिए, C FAQ है।

+2

यदि आप थोड़ा सा स्पष्टीकरण जोड़ना चाहते हैं तो यह अच्छा होगा। –

+1

@DanielFischer गुड कॉल। – cnicutar

+1

धन्यवाद, _now_ मैं इसे ऊपर उठा सकता हूं। –

संबंधित मुद्दे