작업 환경은 visual studio 2010 에서 작업 했으며, 언어는 C/C++ 입니다.
"중복된 선언이 있습니다…" 사실 이러한 부분은 여러 개의 head 파일들이 서로가 서로를 참조하게 되는 것이 가장 큰 원인으로 알고 있었고, 코딩을 하면서는 중복 선언이 되지 않도록 하는대에 주안점을 두고 작업 했음에도 불구하고 오류! ㅠㅠㅠㅠㅠ(왠지 눙물이 나네…)
이 오류를 접한 프로젝트의 구성은 아래와 같았어요. 제가 직접 만든 행렬 클래스 헤더파일이 별도로 선언해 놓은 임시 행렬클래스 변수를 가지고, main에서는 그 헤더파일을 인클루드…
코드는 아래와 같습니다.
// MAT.h // .. 생략 .. class MAT { // 생략.. }; namespace VAL_MAT { // MAT와 관련된 기본 변수 집합 MAT tempRotationMat; // 메모리 재사용을 위한 회전행렬용 변수 // 생략.. } // main.cpp #include "MAT.h" int main() { return 0; }
그리고 이 과정은 정적 라이브러리(.lib)를 이용하는 과정에서 일어난 에러에요. MAT.h와 main.cpp가 같은 폴더에 있는 게 아니랍니다.
정적 라이브러리 만들어서 사용하는 방법은 포스팅 하려고 했는데, 적절한 예시가 생각이 안나서 잠정 보류중인 상태 에요^-^;;;;; 이게 뭔지 알고 싶으신 분들은 검색을 통해서 알아 보시는게 빠를거 같아요ㅠ
어째든 이 일을 어찌 할꼬… 하면서 구글링과 함께 여러 블로거들의 사이트들을 돌아 다니면서..
이 내용과는 전혀 무관한, 다른 부분에서 해결책을 찾았어요. 바로 static 키워드 :D!
프로그램이 구동되는 와중에 한번 메모리에 올라가게 되면, 해당 변수명이 고정되면서, 다시 메모리에 올라가지 않는거죠. 예전에 기본적인 언어 공부를 하면서 global 변수이면서 지역 변수 같은 녀석을 생성해 준다고 배웠었는데, 이 기본적인 거를 까먹고 있었다니..ㅠㅠㅋ
물론, tempRotationMat이란 변수는 타입까지 정확히 "MAT VAL_MAT::tempRotationMat"이기 때문에 다른 곳에서 tempRotationMat이란 이름을 사용한다고 해서 중첩된다고 나오지는 않아요. 그게 바로 namespace!
(이 부분은 어차피 짧으니까 잠시 포스팅을 해볼까 생각 중이에요ㅎ)
(이 부분은 어차피 짧으니까 잠시 포스팅을 해볼까 생각 중이에요ㅎ)
namespace에서도 별 무리없이 작동 하더군요.
이 후에 저런 클래스 별 특별하게 사용되는 변수들 앞에는 모두 static 키워드를 붙여 넣었죠ㅠ
깔끔하게 성공~ ㅎㅎ
물론 이 부분에서 너무 많은 클래스들이 동시다발적으로 저 변수를 사용하게 되면 잘 못된 결과를 도출하게 되겠죠.(특히 thread 사용시ㅋ) 아직 까지 그런 단계는 아니기 때문에 크게 생각하고 있지는 않지만, 추후에 세마포어나 모니터를 사용해서 락기능을 넣어줘야 할 듯 해요:D