Erros de compilador C++: Erros sem sentido de uma declaração de função

2024-12-12

Um desenvolvedor adicionando suporte XAML a um aplicativo C++ encontrou uma série de erros de compilador simplesmente incluindo o arquivo de cabeçalho winrt/Windows.UI.Xaml.h. Os erros decorreram do que parecia ser uma declaração de função normal: `template struct consume_Windows_UI_Xaml_IExceptionRoutedEventArgs { [[nodiscard]] auto ErrorMessage() const; };` A causa raiz era uma macro preexistente chamada ErrorMessage no projeto do desenvolvedor, conflitando com o nome da função. Essa macro criava um objeto ErrorMessageString e retornava um ponteiro para uma string de mensagem de erro. A falta de limites da macro fez com que o compilador interpretasse erroneamente a declaração da função como uma invocação de macro, resultando em erros como "argumentos insuficientes". A solução envolveu desabilitar a macro usando #pragma undef antes de incluir o cabeçalho ou remover a macro completamente e substituí-la por uma função inline.

Leia mais