Errore (C ++ e gcc): atteso costruttore, distruttore o conversione del tipo prima di "inline"

StackOverflow https://stackoverflow.com/questions/1227842

  •  22-07-2019
  •  | 
  •  

Domanda

Ho un file header con alcuni metodi template in linea. Ho aggiunto una dichiarazione di classe (solo un paio di metodi statici ... è più uno spazio dei nomi che una classe) e ho iniziato a ricevere questo errore di compilazione, in un file che utilizza quella nuova classe.

Esistono molti altri file che includono lo stesso file .h che vengono comunque compilati senza lamentele.

Google cerca l'errore mi dà un sacco di collegamenti a mailing list su bug su progetti che hanno un messaggio di errore simile (l'unica differenza che sembra essere ciò che il costruttore, il distruttore o la conversione del tipo dovrebbe precedere).

Sono pronto per iniziare a togliere tutto il resto fino a quando non avrò un campione minimo di ossa nude in modo da poter porre la domanda in modo intelligente, ma ho pensato che avrei preso una pugnalata nel chiederlo prima in modo stupido:

Qualcuno può darmi un indizio di base su cosa significhi effettivamente questo messaggio di errore , quindi potrei essere in grado di iniziare a rintracciarlo / google?

Solo per completezza, il primo esempio di dove sto vedendo questo sembra più o meno come

namespace Utilities
{
   template <typename T> GLfloat inline NormalizeHorizontally(T x)
   {
      GLfloat scaledUp = x*2.0;
      GLfloat result = scaledUp / Global::Geometry::ExpectedResolutionX;
      return result;
   }
}
È stato utile?

Soluzione

Significa che hai inserito " inline " parola chiave nel posto sbagliato. Deve andare prima del tipo restituito dal metodo, ad esempio

 template <typename T> inline GLfloat  NormalizeHorizontally(T x)

Semplice come quello.

Il motivo per cui hai ricevuto questo messaggio su un'unità di compilazione e non su altre potrebbe essere perché è una funzione basata su modelli che non è stata istanziata da quelle altre unità di compilazione.

Generalmente, se ottieni un "blah blah atteso prima del foobar" errore, si tratta di un errore di analisi e spesso indica un semplice errore di sintassi come punto e virgola mancante, parentesi graffa mancante o parole chiave errate. Il problema di solito è da qualche parte intorno alla parte menzionata, ma potrebbe effettivamente essere un po 'di tempo fa, quindi a volte devi cercarlo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top