2012-01-25 12 views
5

Mam dwa pliki Sample.cpp i Main_file.cpp. Sample.cpp ma tylko jedną przestrzeń nazw n1, która zawiera definicję int zmienną x. Chcę wydrukować tę zmienną x w pliku main_file.cpp. Jak mam to zrobić?Problem z obszarem nazw w C++

//Sample.cpp_BEGINS 

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

//Main_FILE_BEGINS 

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

Dziękujemy za pomoc.

Odpowiedz

6

użyć pełnej nazwy zmiennej:

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

    return 0; 
} 
+0

gdy próbowałem wspomnianego kodeksu, mam następujące 2 błędy: 1) „N1”: nie jest to klasa lub obszaru nazw. 2) "x": niezadeklarowany identyfikator. – Jatin

+0

@ user1168582: Czy uwzględniłeś plik nagłówkowy, który faktycznie zdefiniował przestrzeń nazw na 'main.cpp'? Chyba że podasz, że kompilator nie będzie naprawdę wiedział, co to jest 'n'. –

+0

Nie mam żadnego pliku nagłówkowego w tym przypadku. Mam zdefiniowany obszar nazw w pliku Sample.cpp. I próbując uzyskać dostęp do zmiennej liczb całkowitych x do metody main() – Jatin

4

dodać linię using namespace n1 w głównym lub można również zrobić jako @als sugerowane.

+0

Nic złego w korzystaniu z "deklaracji użycia", ale jeśli importowany obszar nazw zawiera wiele symboli, zawsze lepiej jest użyć pełnej kwalifikacji niż zanieczyszczać bieżący obszar nazw wszystkimi symbolami z importowanego obszaru nazw. –

+0

Aals .. masz rację ... ale ja właśnie pomyślałem o rozwiązaniu problemu OP :) – Vijay

+0

@Als: 'using declaration' jest całkowicie odmienne od' using directive'. Ta odpowiedź mówi o tym drugim, a nie pierwszym. –

5

Aby n1::x dostępny od main.cpp prawdopodobnie będziesz chciał, aby utworzyć i obejmują 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; 
} 

Jeśli nie chcesz, aby utworzyć nagłówek Plik możesz również zrobić w swoim main.cpp:

#include <iostream> 

namespace n1 
{ 
    extern int x; 
}  

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

Ale nie chcę tworzyć pliku Sample.h. Chciałem tylko jeden plik Sample.cpp i jeden plik main.cpp. – Jatin

+0

@ user1168582 możesz po prostu wstawić deklarację 'n1 :: x' w main.cpp w tym przypadku. Zobacz mój edytowany przykład. – greatwolf

+1

Dziękuję. Działa teraz :) – Jatin

3

Wygląda na to, że chcesz tylko 2 .cpp plików. W takim przypadku, w następstwie będzie wykonać zadanie:

//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

Dziękuję. Już działa. – Jatin