2011-03-24 11 views
6

में मैक्रोज़ (#define) "संख्यात्मक स्थिरता से पहले अपेक्षित पहचानकर्ता दिखा रहा है" समस्या मैं एक ऐसे अनुप्रयोग को विकसित कर रहा हूं जहां मुझे कई स्थिरांक परिभाषित करने की आवश्यकता है जो एक से अधिक कक्षाओं में उपयोग किए जाएंगे। मैंने अपने सभी स्थिरांक को परिभाषित किया है एक .h फ़ाइल में ("constants.h" कहें) और प्रोजेक्ट के "अन्य स्रोत" फ़ोल्डर में स्थित myAppName_Prefix.pch फ़ाइल में उस फ़ाइल को आयात किया। इन स्थिरांक का उपयोग करने वाले वर्गों को किसी भी त्रुटि के साथ संकलित किया जा रहा है लेकिन अन्य वर्ग, जहांआईपैड

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft) 
: मैं कुछ UISwipeGestureRecognizers, इस वर्गों में से एक से कोड का स्निपेट है कि दिखाया जा रहा है त्रुटि "सांख्यिक निरंतर से पहले प्रत्याशित पहचानकर्ता" के रूप में त्रुटि फेंक रहे हैं घोषित

मैं के रूप में मेरे स्थिरांक परिभाषित:

#define heading 1 
#define direction 2 
#define statement 3 
#define refLink 4 
#define correctResponse 5 
#define incorrect1Response 6 

अगर मैं उन्हें प्रत्येक वर्ग को व्यक्तिगत रूप से तो हर चीज में परिभाषित के रूप में ठीक काम कर रहा। क्या कोई भी मुझे इस मुद्दे को हल करने का तरीका सुझा सकता है।

उत्तर

4

अपने कोड preprocessing के बाद और इस स्पष्ट रूप से मान्य कोड नहीं है।

समाधान आपके # डिफाइन के सामने एक अद्वितीय नामस्थान स्ट्रिंग डालना है।

#define hariDirection 2 

या

#define kDirection 2 

या सबसे अच्छा समाधान imho: का उपयोग नहीं करते #define

typedef enum { 
    heading = 1, 
    direction, 
    statement, 
    refLink, 
    correctResponse, 
    incorrect1Response, 
} MyDirection; 

यह एक ही बात करना होगा, लेकिन यह के साथ संघर्ष नहीं होगा अन्य विधि और चर नाम।

1

अपने स्थिरांक नाम विशिष्ट हो बनाओ:

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft) 

इस

if (gesture. 2==UISwipeGestureRecognizerDirectionLeft) 

की तरह लग रहा

#define kHeading 1 
#define kDirection 2 
#define kStatement 3 
#define kRefLink 4 
#define kCorrectResponse 5 
#define kIncorrect1Response 6 
2

मुझे जीसीसी से एक ही त्रुटि संदेश मिल रहा था।

error: expected ')' before numeric constant 
#define UNIQUE_NAME 0 

जाँच है कि मेरे चर नाम अद्वितीय थे के बाद, मुझे एहसास हुआ कि मैं कोड में बिंदु जहां लगातार किया जा रहा था पर लिखने में कोई त्रुटि थी।

#define UNIQUE_NAME 0 
//... 
if (test_variable UNIQUE_NAME) { //missing == 
//... 
} 

सरल गलती है, लेकिन क्योंकि जीसीसी #define बयान की ओर इशारा करते हुए मुझे गया था खोजने के लिए मुश्किल