miércoles, 12 de noviembre de 2014

ERRORES DE SINTAXIS EN C++

Los errores se han clasi cado en las siguientes
categorías:
Sobre el chero make le y la compilación.
Sobre las directivas de inclusión.
Sobre las clases.
Sobre la sobrecarga de los operadores.
Sobre la memoria.
Sobre las cadenas.
Varios.
Los mensajes de error pueden cambiar de una versión de compilador a otro. Por ejemplo, el siguiente
código contiene dos errores, porque se confunde el manejo de objetos y punteros a objetos:
UnaClase a, *b;
b = &a;
cout << a->propiedad;
cout << b.propiedad;
Si se compila con el compilador g++ 2.95.4 de GNU se obtiene el siguiente mensaje de error:
prueba.cc: In function `int main(...)':
prueba.cc:12: base operand of `->' has non-pointer type `UnaClase'
prueba.cc:13: request for member `propiedad' in `b', which is of non-aggregate
type `UnaClase *'
Si se compila con el compilador bcc32 5.5.1 de Borland se obtiene el siguiente mensaje de error:
Error E2288 prueba.cc 12: Pointer to structure required on left side of -> or ->*
in function main()
Error E2294 prueba.cc 13: Structure required on left side of . or .* in function
main()
1
Como se ha comentado previamente, el formato de los mensajes de error cambia de un compilador a
otro, aunque suelen tener un estructura similar. En general, cada mensaje de error consta de:
El nombre del archivo donde se ha detectado el error.
El número de línea dentro del archivo donde se ha detectado el error.
Un número de referencia de un tipo de error.
Una breve descripción del error.
Por otro lado, el mensaje de error también puede cambiar si previamente han aparecido otros errores
durante el proceso de compilación (pueden aparecer errores donde realmente no hay errores o pueden
desaparecer errores verdaderos). Por ejemplo, el siguiente código.
UnaClase&
UnaClase::operator=(Unaclase& a)
{
...
}
...
produce los siguientes mensajes de error, de los cuales sólo el primero es válido (el resto son falsos errores
inducidos por el primer error):
unaclase.cc:43: `Unaclase' was not declared in this scope
unaclase.cc:43: `a' was not declared in this scope
unaclase.cc:44: declaration of `operator =' as non-function
unaclase.cc:44: invalid declarator
unaclase.cc:44: syntax error before `{'
unaclase.cc:46: ANSI C++ forbids declaration `dim' with no type
unaclase.cc:46: `a' was not declared in this scope
unaclase.cc:47: ANSI C++ forbids declaration `v' with no type
unaclase.cc:47: invalid use of member `UnaClase::dim'
unaclase.cc:48: parse error before `for'
unaclase.cc:48: invalid use of member `UnaClase::dim'
unaclase.cc:48: parse error before `;'
unaclase.cc:48: syntax error before `++'

No hay comentarios:

Publicar un comentario