Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

invalid initialization of reference

Ostatnio zmodyfikowano 2022-01-01 18:01
Autor Wiadomość
dunno
Temat założony przez niniejszego użytkownika
invalid initialization of reference
» 2022-01-01 09:54:02
Błąd: invalid initialization of reference of type &const string&  from expression of type &std::__cxx11::string* const&

Posiadam skompilowany serwer gry MMORPG (niżej link do item.cpp)

item.cpp: https://github.com/divinity76/YurOTS/blob/master/ots/source/item.cpp.

Chciałem dodać tam funkcje serializeAttr jest ona mi niezbędna do zapisywania danych do bazy danych. Działała ona poprawnie lecz chciałem dodać specialDescription i tu zaczęły sie problemy
C/C++
bool Item::serializeAttr( PropWriteStream & propWriteStream ) const
{
   
if( getItemCountOrSubtype() != 0 ) {
       
propWriteStream.addByte( ATTR_COUNT );
       
propWriteStream.addByte( getItemCountOrSubtype() );
   
}
   
// dotad dzialało poprawnie
   
   
   
const std::string & _specialDesc = specialDescription; // błędem sypie w tej linijce
   
if( specialDescription ) {
       
propWriteStream.addByte( ATTR_DESC );
       
propWriteStream.addString( _specialDesc );
   
}
   
   
return true;
}

Lecz wyskakuje mi błąd:

item.cpp: In member function âbool Item::serializeAttr(PropWriteStream&) constâ:
item.cpp:596:36: error: invalid initialization of reference of type âconst string â {aka âconst std::__cxx11::basic_string<char>&â} from expression of type âstd::__cxx11::string* constâ {aka âstd::__cxx11::basic_string<char>* constâ}
  const std::string& _specialDesc = specialDescription;
                                    ^~~~~~~~~~~~~~~~~~
P-179150
pekfos
» 2022-01-01 13:17:53
Referencja jest na zły typ. specialDescription jest wskaźnikiem.
P-179151
dunno
Temat założony przez niniejszego użytkownika
» 2022-01-01 14:58:04
czyli najprościej zrobić:
C/C++
const std::string & _specialDesc = * specialDescription;
if( specialDescription && _specialDesc.length() > 0 ) {
   
propWriteStream.addByte( ATTR_DESC );
   
propWriteStream.addString( _specialDesc );
}
tak? czy przekombinowane? XD
P-179154
pekfos
» 2022-01-01 18:01:01
Tak chciałeś, tylko nie wiem po co. Najprościej byłoby używać specialDescription.
C/C++
if( specialDescription && specialDescription->length() > 0 ) {
   
propWriteStream.addByte( ATTR_DESC );
   
propWriteStream.addString( * specialDescription );
}
P-179155
« 1 »
  Strona 1 z 1