난 C언어에만 익숙했던가 orz이번에 Binary Search Tree 숙제를 하면서 뼈저리게 느꼈습니다.
C++로 제 머릿속에 있는 코드를 컴퓨터에 넣어서 컴파일을 하려고 했습니다.
컴파일을 하고나서 Error가 엄청 많이 뜨더군요
hw4.exe - 132 error(s), 1 warning(s)
제 머릿속에 코드를 이렇게 짜면 될줄 알았더니, 그게 아니더군요.
뭔가 C++ 코드를 보면서 고민을 했습니다. 왜 그럴까?
왠지 제가 C언어 함수 Library를 썼다는 것을 느꼈습니다. string형을 쓰기위해 string 이란 문자열 클래스를 쓰면서 C언어 함수 Library를 썼으니 Error가 나는 것이 당연했습니다. 단순한 것을 삽질하다니
Ego君아, 몇시간동안 삽질한 것이니???
이번에 숙제를 편하게 하기 위해서 char type을 안썼습니다. char type 쓰다간 몇일간 삽질에 Copy & Paste를 할 것 같아서요. C++에서 지원하는 string type은, C언어 char type 쓸때 세세한 부분까지 처리해야한 것과 일일히 NULL처리 하는 것을, 프로그래머에게 쓰기 편하게 해줍니다. C++의 string type 이 없었다면 Binary Search Tree 과제는 몇일간 지속될수도 -_-;;
C++에서 쓰는 string이라는 type은 C언어 문자열 Library가 전혀안먹히더군요. orz
위의 에러는 C++ 컴파일러가 C언어 문자열 Library를 써서 그 문자열 Library가 이해를 못해서 Error를 낸다는 것을 보여졌습니다.
//삽입되는 데이터가 현재 노드에 데이터 보다 작음
if(strcmp(code,(*CurrentNode)->stcode) == -1)
이 코드는 C언어의 strcmp()이란 함수를 쓴 것으로 학번 code의 문자열과 지금 현재 CurrentNode위치에 있는 학생 학번과 ASCII문자열 크기로 비교하여 학번 code 문자열의 ASCII 합 값이 지금 현재 CurrentNode위치에 있는 학성 학번의 문자열의 ASCII 합 값보다 작을때 -1로 return받기 때문에 -1과 같으면 학번 code의 문자열이 문자열 ASCII 합 값이 작다는 것을 보여줍니다.
전 여기 있는 문자열의 type을 string을 해줘서
당연히 Error가 났습니다.
이 문제를 아래과 같이 고쳤습니다
//삽입되는 데이터가 현재 노드에 데이터 보다 작음
if(code.compare((*CurrentNode)->stcode) == -1)
관계 연산자와 compare 함수 모두 다양한 타입에 대해 오버로딩되어 있으므로 string 객체끼리 비교할 수도 있고 string 객체와 문자열 상수를 비교할 수도 있다. 연산자의 경우 좌우변의 순서는 중요하지 않으므로 순서에 상관없이 비교 가능합니다.
거기에 비교한 결과는 정수로 리턴되는데 두 문자열이 완전히 일치하면 0을 리턴하며 호출한 객체가 더 작으면 음수를 리턴하고 호출한 객체가 더 크면 양수를 리턴한다. 표준 strcmp 함수의 리턴값과 의미가 같으므로 외우기도 쉽습니다.
이 문제 해결한다고 몇시간동안 고민한거지? ㅠ_ㅠ
프로그램짜는 것이 삽질이 되어서는 안되는 일인데 ㅠ_ㅠ
나 C++을 1학년 2학기때 배우고도 아직도 잘 모르겠다 -_-;;, C언어는 잘하겠는데
절차지향적인C언어에 너무나 길들여서, 객체지향적인 마인드가 부족하고 C++ 에서 제공하는 Class는 자주 쓰지 않아 익숙하지 않아서 참 걱정이군요.
(그래서 C언어보다 low Level에 있는 어셈블리는 재미있게 듣나?)
아 머리아파 @.@ 어지럽다.
그러나 3학년때에는 C++을 안쓰고 C언어만 쓰니 뭐-_-;; (컴퓨터그래픽스나 게임쪽으로는 C++을 공부하는 것 아니면 대부분의 전공은 C언어 씀-_-;;)
이번 겨울 방학때에 공부를 해야겠다.