Nie potrafię zrozumieć dlaczego ten zapis nie działa. Dla M = 54. Po sprawdzaniu w Internecie taki zapis powinien działać, (Jeśli zamiast lenght jest size(), też nie działa)
string D;
D=M;
cout << D.lenght();
Nie potrafię zrozumieć dlaczego ten zapis nie działa. Dla M = 54. Po sprawdzaniu w Internecie taki zapis powinien działać, (Jeśli zamiast lenght jest size(), też nie działa)
string D;
D=M;
cout << D.lenght();
Jeśli jest tak, jak piszesz (a piszesz, niestety, nader nieczytelnie), to próbujesz przypisać stringowi D
wartość inta M
, co jest niedozwoloną operacją w C++ — o czym Cię poinformował kompilator.
Jak chcesz przerobić liczbę 54
na stringa z zawartością "54"
, to służy do tego funkcja to_string
.
A tak w ogóle, to to brzmi jak problem XY, ale to już inna historia…
Gdybyś jednak to zechciał skompilować, to byś zobaczył, że kompilator podpowiada, że zrobiłeś literówkę:
prog.cc: In function 'int main()':
prog.cc:7:15: error: 'std::string' {aka 'class std::__cxx11::basic_string<char>'} has no member named 'lenght'; did you mean 'length'?
7 | cout << D.lenght();
| ^~~~~~
| length
http://www.cplusplus.com/reference/string/string/operator=/ podaje następujące przeładowania operatora = dla std::string:
(1) string& operator= (const string& str);
(2) string& operator= (const char* s);
(3) string& operator= (char c);
(4) string& operator= (initializer_list<char> il);
(5) string& operator= (string&& str) noexcept;
W tym przypadku wszystko kompiluje się poprawnie, bo ze wszystkich przeładowanych operatorów, jeden jest poprawny w odniesieniu do inta, tzn. użyte jest przeładowanie nr (3) po niejawnej konwersji inta na chara.
Przeładowanie nr (3) jest natomiast zdefiniowane jak poniżej. To powinno rozwiać wszelkie wątpliwości:
The string value is set to a single copy of this character (the string length becomes 1)
Kompilator powinien ci rzucić warningiem o niejawnej konwersji. Warto je czytać :-)
A do przypisania liczby do stringa musisz ją najpierw przekonwertować używając std::to_string:
D=std::to_string(M);