Aktywne Wpisy

Ej czasami mam wrażenie, że tu fajne osoby siedzą. Wynajmijmy jakieś mieszkanie w kilka osób, żeby było tanio, i skończy się samotność. Będziemy wspólnie grać w gierki, czasem do jakiegoś kołchozu pójdziemy, zrobimy małą komunę.

Wrrronika +2
Czy słuchasz muzyki SKA?
- Tak 2.9% (2)
- Nie wiem co to nawet xD 45.7% (32)
- Nie, nie lubię 27.1% (19)
- Kiedyś jak byłem/am młody/młoda 14.3% (10)
- Jedynie mieszanki ska z innymi gatunkami 10.0% (7)




_**"ambigous conversion for C-style cast from 'String' to 'std::__cxxx..."**
String to moja własna klasa będąca mniej czy więcej odwzorowaniem klasy string z biblioteki.
W klasie mam napisaną metodę przeciążającą operator konwersji ( jawny operator konwersji do std::string):
explicit operator std::string() const {string tmp;for(int i=0; i<= this->size_of_text; i++){tmp+=this->text[i];}return tmp;}Iiiii wcześniej przy np:
String s2="abcd";string a=(string) s2;wszystko śmigało, zakomentowałem sobie ten kod, po chwili przypadkiem od komentowałem iiii się okazuje, że nagle dla kompilatora jest to już be (╥﹏╥)
#programowanie #cpp #cplusplus
komunikat mówi, że ma przynajmniej 2 sposoby na zrobienie konwersji, może je wskazuje?
wg mnie jest tylko jedna opcja... Po za tym wcześniej bez przeciążenia operatora nie dało się wykonać takiej konwersji, natomiast teraz bez tej metody jakoś cudownie działa xD
Komentarz usunięty przez autora
edit. próbowałem nawet wszystkie biblioteki wywalić i zostawić tylko iostream i dalej to samo :(
Jak dla mnie chodzi o to, że std::string ma kilka operatorów= zdefiniowanych, m.in. z charów i std::stringa. Twój typ ma konwersję do charów i do std::stringa. Kompilator nie wie, którą ścieżkę wybrać.
A "wcześniej działało", bo pewnie nie przekompilowałeś całego, albo nie zapisałeś zmian przed przekompilowaniem, albo zapomniałeś, że nie działało :)
PS ogólnie to rozumiem, że ten kod jest do nauki operatorów. Bo w prawdziwym życiu kombinowanie z
Edit. wystarczyło "wyłączyć" niejawną konwersję przez explicit dla konwersji do const chara ( ͡° ͜ʖ ͡°)
operator const char*()powinien być przede wszystkim explicit.Z reguły jest masz
operator bool()to wszystko, co się implicit do niego konwertuje powinno być explicit.Dziwne trochę, że u mnie na clangu to działa bez problemu, a co ciekawe przy GCC tylko od C++17.
@lionbest: to już jest #!$%@? :)
MojString haslo("TAJNE_HASLO");
MojString wartoscZBazy = pobierzZBazy();
...
if (haslo == wartoscZBazy) { wystrzelRakiety(); }
wchodzi do ifa niezaleznie od hasla, bo skonwertował sobie oba na boola (a skoro oba są niepuste to oba są true bo tak "dla wygody" zdefiniowałeś operator na boola).
Nie, dzięki. Explicit is better than implicit jak
operator == (MojString, MojString)jeżeli taki istnieje. Jeżeli nie to cóż, rakiety polecą.