공통함수 헤더 처리 시 유의 사항 - 추가(1)
콘솔로 프로그래밍 건드리는 중에
데코(?)라고해서 글자들 쓰기 위한 커서의 위치를 조정하는 함수나
색상을 주는 함수를 자주 사용하는데
매번 새로운 프로젝트 생성 시 마다
계속 복사 붙여넣기를 하다보니
좀 번거로운 감이 없지 않아 있었다.
그래서 공통 해더로 만들어서
#include하여 쓰자!! 라고 생각했는데
애매한 에러 때문에 1시간 30분 넘게 시간을 잡아 먹어 버렸다.
그 유의사항을 공유하도록 하겠다.
class가 하니라 header에 함수를 넣어 놓고 사용을 할 것이므로
아래와 같이 지정을 했었다.
다른 헤더에서 참조하여 써도
그 당시에는 에러가 발생 하지 않는다.
잘 참조 한다는 것이다.
하지만 빌드를 하면 아래와 같은 에러를 보게 될 것이다.
LNK2005 에러...
구글링 해보니까 별에별 설명이 다 되어있는데
납득이 안되는 얘기들이 좀 많았다.
Visual Studio 어디 가서 설정해라... MFC어쩌구 CRT어쩌구...
그래서 더 찾아 보았다.
msdn 정식 사이트에서 원하는 답을 찾을 수 있었다.
https://msdn.microsoft.com/ko-kr/library/72zdcz6f(v=vs.80).aspx
(위에 주소 링크)
뭐 다 떠나서 해결은 "static 변수를 선언합니다." 만 봤다.
void 앞에 static만 추가 시켰다.
잘된다 (눈물의 1시간 반)
그냥 메모리에 공간좀 차지 한다고 해도 쓰자.
시간은 오래 걸렸지만 쉽게 해결 됐다.
만든 header파일은 아래 처럼 include해야지 header안에 만들어놓은 함수 사용에 지장이 없다.
참고로 #include 다음에 <>로 되어있는 것은
시스템에 이미 만들어져 있는(내장되어 있는) 헤더이고
""로 되어있는 것은 내가 만들어서 추가한 헤더이다.
그러므로 common.h라는 이름의 헤더를 내가 만들어 썼다는 얘기이다.
//=======================================================================================
추가 2015. 10.12
위의 방법보다 더 효율적인 방법을 알게 되어 추가 한다.
위와 같이 inline을 사용하는 것이다.
inline으로 만든 함수는 호출하게 되면
실행시 호출하는 그 자리에
함수가 통째로 복사가 되어 돌아가게 된다고 한다.
복잡하고 무거운 함수로 하면
자원 소모가 크겠지만
간단한 함수를 자주 사용하게 된다고 하면
inline이 효율이 좋은 것 같다.
당연한 얘기지만
다른 class에서 사용하려고 하면
저 함수를 제작한 헤더를
#include해주어야 한다.
'공부 > c++(c, STL)' 카테고리의 다른 글
[코딩문제]셀프 넘버(self-number) 풀이 (0) | 2016.06.18 |
---|---|
[코딩문제]문자열 거꾸로 출력 (0) | 2016.06.16 |
C++11 람다 식 (0) | 2016.06.10 |
Vector의 역순 검색, 역 반복자(reverse_iterator) (0) | 2016.02.07 |
다른 class 가져올 때 포인터(*) 유무 차이 - 동적할당, 생성자, 소멸자 (0) | 2015.09.21 |