Newsgroup: it.comp.lang.c++
Titolo: parse error `introvabile'. Richiesta di aiuto.

sto cercando di compilare dei codici sorgente in C++ per una library
numerica. Il mio compilatore (g++ egcs-2.91.66 in linux) dice che ho un parse error:
In file included from mathx.cpp:21:
utility.hpp:46: parse error before `<'
che viene da questo file qui:
// tagliato
#ifndef _UTILITY_HPP_
#define _UTILITY_HPP_
#include <iterator>
#include "numerics.h"
NUM_BEGIN // questo significa (quanto segue e' solo un commento) namespace Numerics_1_1 { #define NUM_END }
// continua il codice
template<class T>
inline T absoluteValue(T value)
//--------------------------------------------------------------------
// Return the absolute value of value.
//--------------------------------------------------------------------
{
	static T zero(0);
	return value < zero ? -value : value;
};
template<class T>
inline bool areEqual(T a, T b, T tol = NUMERICS_MAX_ERROR) // LINEA 46
//--------------------------------------------------------------------
// Return true if a and b are within tol of each other.  Otherwise,
// return false.
//--------------------------------------------------------------------
{
    return ((b - tol <= a) && (a <= b + tol));
};
Io non capisco da dove venga questo parse error, almeno non e' evidente. Qualcuno mi puo' aiutare a capire che cosa sta acadendo?
Grazie in anticipo
Massimo
-- 
Massimo Pinto
Ph.D. student 
Gray Laboratory Cancer Research Trust
http://www.graylab.ac.uk/usr/pinto

Non che ci capisca di template, ma volevo solo dirti una cosa. Quello che
hai postato è la riga incriminata?
Potrebbe essere anche un errore "inventato", come li chiamiamo io ed un mio
amico, cioè l'errore è a monte ed il compilatore si lamenta nel punto in
cui, in base alla logica che ha dato al codice con l'aggiunta dell'
"ingradiente" errato, sballa tale logica.
Di solito succede che il compilatore segnala su punti che non c'entrano
niente se c'è un errore a monte, come una banale } oppure un ; dimenticati.
Controlla un po la sintassi, se ti può essere d'aiuto.
Bye,
Sebastiano

 
Ma come č definito NUMERICS_MAX_ERROR ?
Fai cosě: aggiungi "-save-temps" alle opzioni del gcc nel Makefile. Lancia
la compilazione. Quindi apri mathx.ii, e guarda cosa c'č in quella riga
dopo il passaggio del preprocessore.
Max

Grazie dell'aiuto, rispondo punto per punto
On Mon, 2 Oct 2000, Max M. wrote:
MM >On Mon, 2 Oct 2000, Massimo Pinto wrote:
MM >
MM >> sto cercando di compilare dei codici sorgente in C++ per una library
MM >> numerica. Il mio compilatore (g++ egcs-2.91.66 in linux) dice che ho un parse error:
MM >> 
MM >> In file included from mathx.cpp:21:
MM >> utility.hpp:46: parse error before `<'
MM >> 
MM >
MM >Ma come è definito NUMERICS_MAX_ERROR ?
e' definito cosi':
static const double NUMERICS_MAX_ERROR = 5.0e-9;
MM >Fai così: aggiungi "-save-temps" alle opzioni del gcc nel Makefile. Lancia
MM >la compilazione. Quindi apri mathx.ii, e guarda cosa c'è in quella riga
MM >dopo il passaggio del preprocessore.
questa non la sapevo, mi pare interessante. Ecco il risultato:
[pinto@pc2990 numeric]$ less mathx.ii | grep -A30 -B1 utility.hpp
# 1 "utility.hpp" 1
// tagliato righe vuote, poi c'e' dell'altro piu' giu':
# 1 "/usr/include/g++-2/iterator" 1 3
--
# 20 "utility.hpp" 2
namespace Numerics_1_1 {
template<class T>
inline T absoluteValue(T value)
{
        static T zero(0);
        return value < zero ? -value : value;
};
template<class T>
inline bool areEqual(T a, T b, T tol = NUMERICS_MAX_ERROR)
{
    return ((b - tol <= a) && (a <= b + tol));
};
 
template<class S, class T, class U>
inline T* valueType(const std::iterator<S, T, U>& iter)
[pinto@pc2990 numeric]$  
A me sembra che qui sia tutto ok, ma magari mi sbaglio. Come era stato
suggerito da qualcun altro che gentilmente ha dato un aiuto, l'errore
potrebbe essere stato generato prima. Pero' stento a credere che l'errore
possa essere nel file /usr/include/g++-2/iterator, il quale viene letto un
attimo prima.
Grazie,
