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().

30 marzo 2011 Posted by | all | , , | 1 comentario