ESP8266: error: call of overloaded ‘println(time_t (&)())’ is ambiguous

Esse erro pode acontecer por diversas razões, mas no meu caso foi porque eu estava trabalhando em um exemplo feito por outra pessoa onde o desenvolvedor criou uma variável local chamada “now”. Eu fiz uma modificação acidental que escondeu a declaração da variável e então em vez do compilador me avisar disso ele assumiu que todas as referências a “now” no código fossem as declaradas em bibliotecas como a Time.h, que tem variáveis com o mesmo nome. E ele não sabia qual usar.

O compilador não tem como adivinhar sua intenção nesse caso.

A solução foi consertar a declaração que eu havia apagado, mas melhor ainda foi substituir todas as ocorrências de “now” no código por “agora” para evitar acidentes como esse no futuro. Eu acho que nós brasileiros levamos uma pequena vantagem nesse caso por usarmos naturalmente nomes de variáveis em português, o que evita a colisão com os nomes usados em bibliotecas, que geralmente estão em inglês. Se o nome da variável não fosse “now” minha ocultação acidental da declaração teria apenas causado um erro facílimo de entender do tipo “não foi declarada”. Tenha em mente que se o compilador tivesse encontrado apenas uma alternativa e assim não tivesse ficado confuso compilaria o código e eu estaria usando no meu programa o conteúdo da variável errada (a de uma biblioteca em vez da local) o que levaria a defeitos difíceis de debugar.

This entry was posted in Informação and tagged , . Bookmark the permalink.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *