2012-01-25 13 views
5

Tengo dos archivos Sample.cpp y Main_file.cpp. Sample.cpp tiene solo un espacio de nombre n1 que contiene la definición de int variable x. Quiero imprimir esta variable x en mi main_file.cpp. ¿Cómo voy a hacer esto?Problema de espacio de nombres en C++

//Sample.cpp_BEGINS 

namespace n1 
{ 
    int x=10; 
} 
//Sample.cpp_ENDS 

//Main_FILE_BEGINS 

void main() 
{ 
    print x; 
} 
//MAIN_FILE_ENDS 

Gracias por cualquier ayuda que pueda proporcionar.

Respuesta

6

utiliza el nombre completo de la variable:

int main() 
{ 
    n1::x = 10; 

    return 0; 
} 
+0

cuando he intentado el código antes mencionado, tengo los siguientes errores: 2 1) 'n1': no ​​es un nombre de clase o espacio de nombres. 2) 'x': identificador no declarado. – Jatin

+0

@ user1168582: ¿Incluyó el archivo de encabezado que realmente definió el espacio de nombres como 'main.cpp'? A menos que incluya que el compilador realmente no sabrá qué es 'n'. –

+0

No tengo ningún archivo de encabezado en este caso. He definido el espacio de nombres en el archivo Sample.cpp. Y tratando de acceder a la variable entera x en el método main() – Jatin

4

añadir una línea en using namespace n1 principal o también se puede hacer como sugirieron @als.

+0

No hay nada de malo con el uso de 'using declaration' pero si el espacio de nombres que se está importando contiene muchos símbolos, siempre es mejor utilizar la calificación completa en lugar de contaminar el espacio de nombres actual con todos los símbolos del espacio de nombres importados. –

+0

@als ... tienes razón ... pero pensé en resolver el problema del OP :) – Vijay

+0

@Als: 'using declaration' es completamente diferente de' using directive'. Esta respuesta habla de esto último y no de lo primero. –

5

Para hacer n1::x accesible desde main.cpp es probable que desee para crear e incluir sample.h:

// sample.h 
#ifndef SAMPLE_H 
#define SAMPLE_H 

namespace n1 
{ 
    extern int x; 
} 
#endif 

// sample.cpp 
#include "sample.h" 

namespace n1 
{ 
    int x = 42; 
} 

#include <iostream> 
#include "sample.h" 

int main() 
{ 
    std::cout << "n1::x is " << n1::x; 
} 

Si prefiere no crear una cabecera archivo también puede hacerlo en su main.cpp:

#include <iostream> 

namespace n1 
{ 
    extern int x; 
}  

int main() 
{ 
    std::cout << "n1::x is " << n1::x; 
} 
+0

Pero no quiero crear el archivo Sample.h. Solo quería un archivo Sample.cpp y un archivo main.cpp. – Jatin

+0

@ user1168582 puede simplemente poner la declaración 'n1 :: x' en main.cpp en ese caso. Ver mi ejemplo editado. – greatwolf

+1

Gracias. Está funcionando ahora :) – Jatin

3

De tu comentario, parece que solo quieres 2 archivos .cpp. En ese caso, después hará el trabajo:

//Sample.cpp_BEGINS 
namespace n1 
{ 
    int x=10; 
} 
//Sample.cpp_ENDS 

//Main_FILE_BEGINS 
namespace n1 
{ 
    extern int x; // <---- mention that `x` is defined in other .cpp file 
} 
void main() 
{ 
    print n1::x; // to avoid 'n1::', mention 'using namespace n1;` above 
} 
//MAIN_FILE_ENDS 
+2

Gracias. Está trabajando ahora. – Jatin

Cuestiones relacionadas