Decifrando mensagens de erro do modelo C++
-
09-06-2019 - |
Pergunta
Estou realmente começando a entender o que as pessoas querem dizer quando dizem que as mensagens de erro do C++ são terríveis em relação aos modelos.Já vi erros terrivelmente longos para coisas tão simples como uma função que não corresponde ao seu protótipo.
Existem truques para decifrar esses erros?
EDITAR:Estou usando gcc e MSVC.Ambos parecem ser terríveis.
Solução
Você pode tentar a seguinte ferramenta para tornar as coisas mais sensatas:
Outras dicas
Eu com certeza não posso.Pequenos erros explodem em páginas e mais páginas de lixo ilegível.Geralmente de manhã cedo, antes do café.:(
Meu único conselho é respirar fundo, começar do topo e tentar analisar as informações importantes.(Eu sei, é mais fácil falar do que fazer, certo?).
Como @Sanders disse STLFilt é uma boa solução.Um STLFilt caseiro (quando você não quer se dar ao trabalho de instalar o Perl) é copiar a mensagem de erro em um editor e começar a substituir partes do erro até que ele se torne (mais) gerenciável.
por exemplo.
s/std::basic_string<char,std::char_traits<char>,std::allocator<char>>/string/g
Em termos menos geeks, isso significa:
Substituir:
std::basic_string<char,std::char_traits<char>,std::allocator<char>>
Com:
string
Alguns compiladores fornecem mensagens melhores que outros.Qual compilador você está usando?Dito isto, eles são todos muito ruins.C++0X resolverá a maior parte deste problema (veja conceitos), mas o padrão não será lançado antes de 2009, e o amplo suporte provavelmente ocorrerá ainda mais tarde :-(
Pelo menos no Visual Studio, há mais informações fornecidas na janela Output Build em vez da lista de erros.Ocorreu um erro de modelo no estado da Lista de Erros, "Não é possível converter Foo<int> em Foo<int>".Houve algumas linhas após o erro real na janela Saída que me ajudaram a decifrar qual era o problema real.