2012-02-08 16 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; 
} 

Ben, benim Cadena diğer yöntemlerde, strlen gibi işlevleri kullanmadan bir C dize uzunluğunu hesaplamak için bu sorun istiyoruz gelmiş sınıf çünkü yapamam çünkü char *, ama şimdi ne yapacağımı bilmiyorum.geçersiz dönüşüm [-fpermissive]

+7

Muhtemelen '-fpermissive' kullanmamalısınız. Normalde bir hataysa, derlememelisiniz. –

+0

IDE kod bloklarını kullanıyorum ve varsayılan derleme modudur – freinn

+2

'strlen (punt)' ın nesi yanlış? Veya "std :: string" veya "std :: vektör " için "c.pstr"? Bu döngülerin ve değişkenlerin çoğu, bazı standart şablonların basit kullanımıyla ortadan kalkacaklarına benzer. – dreamlax

cevap

9

:

const char * punt = cad; 
+0

+1 aynı zamanda başlatılması için! – dreamlax

+0

Neden (ve ben) bunu yapabilirsin? bir const çünkü? Normal bir işaretçi aynı anda başlatamaz – freinn

+0

Elbette yapabilir! Neden düşünmedin? –

4

Sen gerekir: Doğru türde olması punt ilan edebilir

const char* punt; punt = cad; 
+0

Omg !! Bunu düşünmüyordum, o zaman neden bu işaretçiyi "const" kelimesini uzunluğunu hesaplamak için hareket ettirdiğimi söyledik? : S: S – freinn

+4

@freinn yine de bir “const”, yani 'const char *' anlamına gelen bir işaretçiyi taşıyabiliyorsunuz, sadece imlecin işaret ettiği noktaları değiştiremeyeceğiniz anlamına gelir. _move_ yapamayacağınız bir işaretçi istiyorsanız, ancak işaret ettiği şeyi değiştirebiliyorsanız, o zaman "char * const" komutunu kullanırsınız ve eğer hem hareket edemezsiniz hem de ne değiştiremezsiniz? 'const char * const' –

+0

@freinn'e gereksiniminiz var: İşaret ettiği nesnenin değerini değiştiremezsiniz, ancak işaret ettiği yeri değiştirebilirsiniz. – dreamlax