Enviado em 25/08/2021 - 21:09h
Alguém com mais experiência em c/c++ poderia me ajudar a resolver esse tipo de ambiguidade? Eu tento compilar o p7zip e dá esse erro.g++ -c -std=gnu++11 -I. -I../../../../C -I../../../../CPP/myWindows -I../../../../CPP/include_windows -I../../../../CPP -O2 -s -pipe -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DNDEBUG -D_REENTRANT -DENV_UNIX -D_7ZIP_LARGE_PAGES `wx-config --unicode=yes --cxxflags` -DLANG -DEXTERNAL_CODECS -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_REENTRANT -DENV_UNIX -DUNICODE -D_UNICODE -DUNIX_USE_WIN_FILE ../../../../CPP/Windows/Control/Controls.cpp ../../../../CPP/Windows/Control/Controls.cpp: In member function 'virtual bool NWindows::NControl::CDialogChildControl::GetText(CSysString&)': ../../../../CPP/Windows/Control/Controls.cpp:86:17: error: ambiguous overload for 'operator=' (operand types are 'CSysString' {aka 'UString'} and 'wxString') 86 | s = str; | ^~~ In file included from ../../../../CPP/myWindows/StdAfx.h:20, from ../../../../CPP/Windows/Control/Controls.cpp:3: ../../../../CPP/Common/MyString.h:526:12: note: candidate: 'UString& UString::operator=(const wchar_t*)' 526 | UString &operator=(const wchar_t *s); | ^~~~~~~~ ../../../../CPP/Common/MyString.h:529:12: note: candidate: 'UString& UString::operator=(const char*)' 529 | UString &operator=(const char *s); | ^~~~~~~~ ../../../../CPP/Windows/Control/Controls.cpp: In member function 'void NWindows::NControl::CComboBox::GetText(CSysString&)': ../../../../CPP/Windows/Control/Controls.cpp:125:21: error: ambiguous overload for 'operator=' (operand types are 'CSysString' {aka 'UString'} and 'wxString') 125 | s = str; | ^~~ In file included from ../../../../CPP/myWindows/StdAfx.h:20, from ../../../../CPP/Windows/Control/Controls.cpp:3: ../../../../CPP/Common/MyString.h:526:12: note: candidate: 'UString& UString::operator=(const wchar_t*)' 526 | UString &operator=(const wchar_t *s); | ^~~~~~~~ ../../../../CPP/Common/MyString.h:529:12: note: candidate: 'UString& UString::operator=(const char*)' 529 | UString &operator=(const char *s); | ^~~~~~~~ ../../../../CPP/Windows/Control/Controls.cpp: In member function 'void NWindows::NControl::CComboBox::GetLBText(int, CSysString&)': ../../../../CPP/Windows/Control/Controls.cpp:136:21: error: ambiguous overload for 'operator=' (operand types are 'CSysString' {aka 'UString'} and 'wxString') 136 | s = str; | ^~~ In file included from ../../../../CPP/myWindows/StdAfx.h:20, from ../../../../CPP/Windows/Control/Controls.cpp:3: ../../../../CPP/Common/MyString.h:526:12: note: candidate: 'UString& UString::operator=(const wchar_t*)' 526 | UString &operator=(const wchar_t *s); | ^~~~~~~~ ../../../../CPP/Common/MyString.h:529:12: note: candidate: 'UString& UString::operator=(const char*)' 529 | UString &operator=(const char *s); | ^~~~~~~~ ../../../../CPP/Windows/Control/Controls.cpp: In member function 'virtual bool NWindows::NControl::CEdit::GetText(CSysString&)': ../../../../CPP/Windows/Control/Controls.cpp:211:17: error: ambiguous overload for 'operator=' (operand types are 'CSysString' {aka 'UString'} and 'wxString') 211 | s = str; | ^~~ In file included from ../../../../CPP/myWindows/StdAfx.h:20, from ../../../../CPP/Windows/Control/Controls.cpp:3: ../../../../CPP/Common/MyString.h:526:12: note: candidate: 'UString& UString::operator=(const wchar_t*)' 526 | UString &operator=(const wchar_t *s); | ^~~~~~~~ ../../../../CPP/Common/MyString.h:529:12: note: candidate: 'UString& UString::operator=(const char*)' 529 | UString &operator=(const char *s); | ^~~~~~~~ make[1]: *** [makefile.list:285: Controls.o] Erro 1 make[1]: Saindo do diretório '/home/mauricio/BUILDS/Slackware_15_0/p7zip/p7zip-17.04/CPP/7zip/UI/GUI' make: *** [makefile:55: 7zG] Erro 2
Enviado em 26/08/2021 - 08:34h
Ao que parece, o programa está tentando converter, por meio de uma atribuição, um dado do tipo wxString em um dado do tipo UString mas parece também que não existe uma conversão direta entre esses tipos, mas que existem duas conversões conhecidas que poderiam ser usadas como intermediárias, entretanto o compilador não consegue decidir qual das duas usar.class X { public: // Habilita conversões implíticas de X para ponteiro para caracteres e ponteiros para caracteres largos. operator const char *() const; operator const wchar_t *() const; }; class Y { public: // Permite fazer atribuições a partir de ponteiros para caracteres ou ponteiros para caracteres largos. Y &operator=(const char *); Y &operator=(const wchar_t *); }; void f(){ X x; Y y; // Não existe conversão direta de X para Y, então o compilador tenta usar as conversões conhecidas, mas encontra duas igualmente válidas, // e não sabe dizer qual das duas deve ser usada. Vai dar a mesma mensagem de erro que você recebeu. y=x; }
Enviado em 26/08/2021 - 14:02h
Conhecimento não se Leva para o Túmulo. https://github.com/MauricioFerrari-NovaTrento
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Problemas com SQL em objeto TLabel ... (1)
Youtube e networkmeneger para de funcionar (5)
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)