(C ++ e gcc) erro: esperado construtor, destruidor, ou tipo de conversão antes de 'in-line'
-
22-07-2019 - |
Pergunta
Eu tenho um arquivo de cabeçalho com alguns métodos de modelo em linha. Eu adicionei uma declaração de classe para ele (apenas um par de métodos estáticos ... é mais de um namespace de uma classe), e eu comecei a receber este erro de compilação, em um arquivo que usa essa nova classe.
Existem vários outros arquivos que incluem o mesmo arquivo .h que ainda compilar sem queixa.
pesquisando para o erro me dá um monte de links para listas de discussão sobre erros em projetos que têm uma mensagem de erro semelhante (a única diferença aparente ser o que o construtor, a conversão destructor, ou tipo deve preceder).
Eu estou pronto para começar a descascar tudo fora até que eu tenha um bare-ossos amostra mínima para que eu possa fazer a pergunta inteligente, mas eu percebi que eu tomar uma facada na cotação do jeito estúpido primeira:
Alguém pode me dar uma pista básica sobre o que esta mensagem de erro, na verdade, através , então eu poderia ser capaz de começar a rastreá-lo / google-lo?
Apenas por uma questão de exaustividade, o primeiro exemplo de onde eu estou vendo isso parece mais ou menos como
namespace Utilities
{
template <typename T> GLfloat inline NormalizeHorizontally(T x)
{
GLfloat scaledUp = x*2.0;
GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
return result;
}
}
Solução
Isso significa que você colocar a palavra-chave "inline" no lugar errado. Ele precisa ir antes do tipo de retorno do método, por exemplo.
template <typename T> inline GLfloat NormalizeHorizontally(T x)
Simples como isso.
A razão que você recebeu esta mensagem em uma compilação de unidades e outros não podem ser porque é uma função templated que não estava sendo instanciado a partir dessas outras unidades de compilação.
Geralmente, se você receber um erro "esperado blá blá antes foobar", este é um erro de análise e que muitas vezes indica um erro de sintaxe simples, como um ponto e vírgula faltando, cinta ausente, ou palavras-chave misordered. O problema é geralmente em algum lugar ao redor da porção mencionado, mas poderia realmente ser um tempo atrás, por isso às vezes você tem que caçar para ele.