2009-07-07 2 views
5

"painting/qpathclipper.cpp", riga 1643.30: 1540-0274 (S) Il nome di ricerca per "fuzzyCompare" non ha trovato una dichiarazione.Le dichiarazioni statiche non vengono considerate per una chiamata di funzione se la funzione non è abilitata

"painting/qpathclipper.cpp", riga 1643.30: 1540-1292 (I) Le dichiarazioni statiche non vengono considerate per una chiamata di funzione se la funzione non è qualificata.

sto cercando di compilare Qt 4.5.0 su XLC 9.0.0.4a, e ottenere il messaggio del compilatore sopra per il seguente codice:

static bool fuzzyCompare(qreal a, qreal b) 
{ 
    return qFuzzyCompare(a, b); 
} 

template <typename InputIterator> 
InputIterator qFuzzyFind(InputIterator first, InputIterator last, qreal val) 
{ 
    while (first != last && !fuzzyCompare(qreal(*first), qreal(val))) //line 1643 
     ++first; 
    return first; 
} 
+1

Vedi anche [funzione di ricerca statica da un problema di funzione template con XLC] (http://stackoverflow.com/q/17661308/33732) –

risposta

6

La parola chiave "statica" è in errore qui , fuzzyCompare dovrebbe essere dichiarato solo

bool fuzzyCompare(qreal a, qreal b) 
+2

Per la cronaca, questo non è il caso: funzioni che sono interne a una compilation un * dovrebbe * essere statico, altrimenti il ​​simbolo verrà esportato. Invece, l'errore xlC dovrebbe essere corretto qualificando l'uso di "fuzzyCompare' con il nome completo (incluso lo spazio dei nomi) nel punto di utilizzo. –

+1

Ooh, probabilmente hai ragione. Striking the 'static' ha ottenuto la compilazione per avere successo, perché non stavo per sostituire tutte le chiamate a' fuzzyCompare' (ora 'qFuzzyCompare' nella serie 5.x) in un tarball da 200 MB ... –

+0

@WalterNissen:' find . -type d -exec grep -l "[^:] fuzzyCompare (" {} \; | sed -i "s/\ ([^:] \) fuzzyCompare (/ \ 1fuzzy_namespace :: fuzzyCompare (/ g" '- non testato e fuori dalla mia testa, ma tu hai l'idea. ;-) – DevSolar