좋은 의견 남겨주신 분들께 진심으로 감사드립니다 .
종일 생각해 본 결과를 말씀드리겠습니다 .
일단, 실제 메모리에 놓이게 될 인스턴스(변수 선언, 함수 정의 따위)는 네임스페이스에 두지 않는 게 적절한
사용법인 것 같습니다 .
네임스페이스는 전역 정의만 가능하므로, 네임스페이스로 정의한 요소들은 "전역성" 을 띄고 있습니다 .
따라서, 네임스페이스 정의를 헤더파일에 위치시킬 때에는 .. 해당 헤더파일이 여러 파일에 인클루드 될 때 ..
"충돌" 이 발생할 수 있는 요소들 (즉, not static 전역변수의 선언 / not static 함수의 정의 .. 따위) 이 ..
네임스페이스에 포함되어 있지 않도록 .. 주의해서 작성해야 합니다 .
네임스페이스에 굳이 .. 권하지 않는 요소들을 포함시켜야 할 때는 ..
아래와 같이 해주시면 됩니다 .
/******** ns.cpp (네임스페스가 정의되어 있는 파일 *******/
namespace ns // 네임스페이스 정의
{
int x; // 전역 변수
int y; // 전역 변수
}
namespace는 아무데서나
namespace는 아무데서나 만들수 있고, 이름만 같으면 됩니다.
다른 파일에서도 똑같은 방법으로 작성하면됩니다.
해더파일의 확장자는 아무거나 상관없습니다만, 보통은 .h 혹은 .hpp를 이용합니다.
네 .. 답변 감사합니다.
하나의 프로젝트에서 ..
한 쪽의 파일에 작성된 namespace 를 ..
다른 쪽 파일에서 .. 사용할 수 있는지 .. 궁금합니다 ;
여러가지 방법으로 시도해 봤는데 .. 오류가 나서 ..
질문 드립니다 .
그리고, 헤더파일은 .. ;;
음 .. 아닙니다 .
제가 말을 조리 있게 못하다 보니 ..
질문의 의도와는 그다지 상관없는 쪽으로 ..
다른 쪽으로 받아들이신 것 같습니다 ^^ ;;
한 쪽의 파일에 작성된 namespace 를 ..
다른 쪽 파일에서 .. 사용하는 방법을 알고 계시면 좀 알려주셔요 .
설연희 입니다 ^ ㅡ^ㅋ
설연희 입니다 ^ ㅡ^ㅋ
'namespace를
'namespace를 사용한다'는 건 예를 들면 A라는 네임스페이스 안에 정의된 함수 a를 다른 파일에서 어떻게 호출하느냐는 뜻인가요?
아 .. 안녕하셔요 ^^
네 .. 가령 ..
아래와 같이 file1.cpp 그리고 file2.cpp 로 구성된 프로젝트를 ..
컴파일하는 경우에요 ..
// file1.cpp
namespace ns
{
int x;
}
// file2.cpp
main()
{
ns::x = 1; // 오류 : "ns 는 클래스나 네임스페이스 이름이 아닙니다"
}
위의 경우 .. 오류가 나길래 ...
// file1.cpp
namespace ns
{
int x;
}
// file2.cpp
extern int ns::x;
main()
{
ns::x = 1; // 오류 : "ns 는 클래스나 네임스페이스 이름이 아닙니다"
}
이렇게 되네요 ;;
file1.cpp 에 있는 ns::x 를 ..
file2.cpp 에서 사용하는 방법을 알고 싶어요 ;;
관심가져 주셔서 대단히 감사합니다 .
설연희 입니다 ^ ㅡ^ㅋ
설연희 입니다 ^ ㅡ^ㅋ
헤더 파일 만들고 거기게 namespace선언하면 될거 같은데야
tmp.h
만들고
그 안에 단순히
namespace ns {};\
하면 될거 같은데
아니면
file2.cpp
에서
namespace ns;
앞에 써주면 안 될려나.
즐린
음, namepsace 를 정의하시는 부분을 헤더로 빼시면 곤란하신 건가요?
namesace ns
{
int x ;
}
와 같이 namespace 정의부를 헤더로 빼시고 include하시면 되는 것을 모르셔서
질문을 하셨을 것 같지는 않고...
그래도 답은 저것밖에 없지 않나 싶은데요.
자문자답입니다 .
좋은 의견 남겨주신 분들께 진심으로 감사드립니다 .
종일 생각해 본 결과를 말씀드리겠습니다 .
일단, 실제 메모리에 놓이게 될 인스턴스(변수 선언, 함수 정의 따위)는 네임스페이스에 두지 않는 게 적절한
사용법인 것 같습니다 .
네임스페이스는 전역 정의만 가능하므로, 네임스페이스로 정의한 요소들은 "전역성" 을 띄고 있습니다 .
따라서, 네임스페이스 정의를 헤더파일에 위치시킬 때에는 .. 해당 헤더파일이 여러 파일에 인클루드 될 때 ..
"충돌" 이 발생할 수 있는 요소들 (즉, not static 전역변수의 선언 / not static 함수의 정의 .. 따위) 이 ..
네임스페이스에 포함되어 있지 않도록 .. 주의해서 작성해야 합니다 .
네임스페이스에 굳이 .. 권하지 않는 요소들을 포함시켜야 할 때는 ..
아래와 같이 해주시면 됩니다 .
/******** ns.cpp (네임스페스가 정의되어 있는 파일 *******/
namespace ns // 네임스페이스 정의
{
int x; // 전역 변수
int y; // 전역 변수
}
/******** ns.h (헤더파일) *******************************/
namespace ns // 외부 연결을 위한 네임스페이스 정의
{
extern int x;
extern int y;
}
/******** main.cpp **************************************/
#include ns.h
extern void incOne(void);
void main(void)
{
ns::x = 1; // ok
ns::y = 10; // ok
incOne(); // ok
}
/******** sec.cpp ***************************************/
#include ns.h
void incOne(void)
{
ns::x++; ns::y++; // ok
}
설연희 입니다 ^ ㅡ^ㅋ
설연희 입니다 ^ ㅡ^ㅋ
코드가 껄끄럽군요..
extern 이 헤더에 쓰인 게 단순히 다른 cpp 에 코드 카피로 사용된 건데...
다른 곳에서 중복 선언이 됐다면 extern 이 원하는대로 동작할 지 궁금하군요.
선언을 1번만 해도 되는 걸 굳이 두 곳에 나눠서 하는 게 귀찮기도 하고 위험할 것 같은데요.
댓글 달기