2012-02-08 8 views
7
int :: cadena calculatelenght(const cadena& a, const char* cad) 
{ 
    cadena c; 
    int lenght = 0; 
    char* punt; punt = cad; 
    while(*punt){ 
     lenght++; punt++; 
    } 
    return lenght; 
} 

मैं इस समस्या है, मैं strlen जैसे कार्यों का उपयोग किए बिना एक सी स्ट्रिंग की लंबाई की गणना करने के, मेरे cadena के अन्य तरीकों में जानना चाहते हैं कक्षा मैं कर सकता हूं क्योंकि कॉन्स char * नहीं है, लेकिन अब मुझे नहीं पता कि क्या करना है।अवैध रूपांतरण [-fpermissive]

+7

आप शायद -fpermissive' उपयोग नहीं करना चाहिए '। यदि यह सामान्य रूप से एक त्रुटि है, तो आपको इसे संकलित नहीं करना चाहिए। –

+0

मैं कोड ब्लॉक आईडीई का उपयोग कर रहा हूं और डिफ़ॉल्ट संकलन मोड – freinn

+2

'strlen (punt)' में क्या गलत है? या 'std :: string' या' std :: वेक्टर '' c.pstr' के लिए? इनमें से बहुत सारे लूप और चर दिखते हैं जैसे वे कुछ मानक टेम्पलेट्स के सरल उपयोग से दूर चले जाएंगे। – dreamlax

उत्तर

9

आप punt घोषणा कर सकते हैं सही प्रकार की होने के लिए:

const char * punt = cad; 
+0

+1! – dreamlax

+0

आप (और मुझे) ऐसा क्यों कर सकते हैं ?? क्योंकि एक कॉन्स है ?? एक सामान्य सूचक एक ही समय में शुरू नहीं कर सकता – freinn

+0

यकीन है कि यह कर सकता है! तुमने क्यों नहीं सोचा? –

4

आप की जरूरत है:

const char* punt; punt = cad; 
+0

ओमग !! मैंने ऐसा नहीं सोचा था, तो हम क्यों कहते हैं कि यह पॉइंटर "कॉन्स्ट" है जब मैं इसे लंबाई की गणना करने के लिए ले जाता हूं ?? : एस: एस – freinn

+4

@ फ़्रेनिन आप अभी भी एक पॉइंटर ले जा सकते हैं जो कुछ 'कॉन्स्ट' को इंगित करता है, कि 'const char *' का मतलब है कि आप पॉइंटर पॉइंट्स को संशोधित नहीं कर सकते हैं। यदि आप एक सूचक चाहते हैं कि आप _move_ नहीं कर सकते हैं, लेकिन आप इसे संशोधित कर सकते हैं, तो आप 'char * const' करते हैं, और यदि आप एक पॉइंटर चाहते हैं कि आप दोनों स्थानांतरित नहीं कर सकते हैं और आप संशोधित नहीं कर सकते यह इंगित करता है कि आपको 'कॉन्स char * const' –

+0

@freinn की आवश्यकता है: आप उस ऑब्जेक्ट के मान को नहीं बदल सकते जो यह इंगित करता है, लेकिन आप इसे कहां बदल सकते हैं। – dreamlax

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