Proyecto Fin de Carrera

Robótica, software y telecomunicaciones.

Scope, namespace y ::

Es posible que entre los errores que nos encontramos en la fase de compilación, se encuentren errores relacionados con el SCOPE. Aunque no son errores muy comunes y uno puede advertirlos con facilidad, os explicaré brevemente cómo evitarlos o solucionarlos.

En otras entradas del blog he mencionado expresiones del tipo worker::compute() o std::cout>>, la expresión de cuatro puntos :: se conoce como operador de ámbito, y su función principal es evitar los problemas de SCOPE.

El problema de SCOPE ocurre principalmente cuando se usan dos o más métodos con el mismo nombre pero con implementaciones diferentes. Por ejemplo nosotros podemos estar haciendo una calculadora para lo que incluiremos una librería matemática math.h que tiene sus propios métodos (sum(), plow(), abs()…), si nos creamos un método llamado sum(), y luego en main() llamamos a sum(), obtendríamos un claro error de SCOPE al intentar compilar, pues de este modo el compilador no puede averiguar si en main() nos referimos al sum() de math.h o al sum() que nosotros hemos creado.

Esto se soluciona con el operador de ámbito ::, de modo que en main() podríamos escribir math::sum() o main::sum() para que el compilador sepa a cual de los dos nos referimos. De forma que para asegurarnos de no tener problemas de SCOPE lo ideal sería utilizar contínuamente el operador de ámbito, sin embargo puede llegar a ser engorroso si usamos a menudo los métodos de un ámbito determinado. Es decir, imaginemos que en nuestra calculadora solemos usar con mucha frecuencia el math::sum(), y sólo algunas veces usamos main::sum(), en ese caso podemos usar:

using namespace math;

De este modo en caso de que el compilador se encuentre con sum(), da por hecho que nos referimos a math::sum().

Anuncios

30 marzo 2011 - Posted by | all | , ,

1 comentario »

  1. […] en la cabecera del worker.h para poder usar las funciones como funcionDeOpenCV(), como explico en esta entrada. […]

    Pingback por OpenCV2.2 con IPP activas en Ubuntu 10.10 « Proyecto Fin de Carrera | 1 abril 2011 | Responder


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: