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

mam ten problem, chcę, aby obliczyć długość łańcucha C bez używania funkcji jak strlen, innymi metodami moim Cadena klasa I może, ponieważ nie jest const char *, ale teraz nie wiem co robić.nieprawidłowy konwersji z „const char *” do „char *” [-fpermissive]

+7

Prawdopodobnie nie powinno się używać '-fpermissive'. Jeśli jest to normalnie błąd, nie powinieneś go kompilować. –

+0

Używam bloków kodu IDE i jest domyślny tryb kompilacji – freinn

+2

Co jest nie tak z 'strlen (punt)'? Lub 'std :: string' lub' std :: vector 'dla' c.pstr'? Wiele z tych pętli i zmiennych wygląda tak, jakby odeszły z prostym użyciem standardowych szablonów. – dreamlax

Odpowiedz

9

Można zadeklarować punt być odpowiedniego typu:

const char * punt = cad; 
+0

+1 za zainicjowanie w tym samym czasie! – dreamlax

+0

Dlaczego możesz (i ja) to zrobić? ponieważ jest const? normalny wskaźnik cant zainicjować w tym samym czasie – freinn

+0

Pewnie, że może! Dlaczego myślisz, że nie? –

4

potrzebował:

const char* punt; punt = cad; 
+0

Omg !! Nie myślałem, że to, dlaczego mówimy, że ten wskaźnik jest "const", kiedy go przenieść, aby obliczyć długość? : S: S – freinn

+4

@freinn nadal możesz przesuwać wskaźnik, który wskazuje na coś 'const', że' const char * 'oznacza po prostu, że nie możesz zmodyfikować tego, co wskazuje wskaźnik na_. Jeśli chcesz wskaźnik, którego nie możesz _przenieś_, ale możesz modyfikować to, co wskazuje, to robisz 'char * const', i jeśli chcesz wskaźnik, którego nie możesz przenieść i nie możesz zmienić wskazuje na to, potrzebujesz 'const char * const' –

+0

@freinn: Nie możesz zmienić wartości obiektu, na który wskazuje, ale możesz zmienić miejsce, w którym wskazuje. – dreamlax