[ CnUnix ] in KIDS 글 쓴 이(By): zeo (ZeoDtr) 날 짜 (Date): 1994년05월24일(화) 10시02분59초 KDT 제 목(Title): Re:C++에서요... 시간에 관한 것은 윗분들이 저보다 잘 말씀해 주신 것 같구요, 저는 언어 자체에 대해서 한번 말씀 드릴께요. 수리샛별님이 얻으신(?) 에러는 두가지라고 하셨죠. 1) ctime에서 에러가 난 것은 ctime의 declaration에 어긋나는 argument를 주었기 때문 (이 경우에는 주어야 하는 것을 안주셨죠) 이죠. (이거 K&R C에서는 에러를 안잡아주니 더욱 난감하죠. 그래서 컴파일러는 좋은 걸 써야...) 2) tm_min에서 에러가 난 것은 괄호를 잘못 치셨기 때문이죠. (진짜 그렇게 코딩하셨어요?) *(time).tm_min 은 operator의 precedence rule에 따라 *(time.tm_min)이 되어 버립니다. 따라서 "non-object . tm_min" 이런 식의 에러 메시지가 나왔을 겁니다. (*time).tm_min 이나 time->tm_min (요게 정석. `->' operator에게도 등장의 기회를...) 이 맞죠. 음, 너무 기본적인 걸 썼나? 그리구, 만일 수리샛별님이 이것을 원래는 맞게 썼고, BBS에 올리다 잘못 옮겨 적으신 거라면, 그래도 에러가 나는 이유는 #include <iostream.h> 가 빠졌기 때문이라고 말할 수 있습니다. C++에서는 어떤 함수라도 사용하기 전에는 declaration이나 definition이 먼저 나와야 합니다. 안그러면 즉시 뱉어버리죠. `나 이런 함수 몰라!'라구요. 여기서는 `<<'가 함수 (operator 함수) 인데, 그것이 정의되어 있지 않으니까 에러가 나죠. 또한, cout도 global 변수 (이 말이 껄끄러우면 global object) 일텐데, 그것에 대한 declaration (extern 뭐뭐 하는) 이나 definition이 없었으므로 컴파일러는 불평을 하는 겁니다. C++에서는 #include의 중요성이 C보다 훨씬 더합니다. 근데, 보니까 tm_min 줄에 `;'을 안하셨던데, 이건 정말 옮겨적기 실수겠죠? :) 뱀다리: HellCat님께. HellCat님은 cast expression을 무척 좋아하시는 것 같네요. 안해도 당연한 것을 일부러 하시는군요. 그리고, C++에서는 컴파일러가 함수의 declaration (with argument!)을 보고 웬만한 type conversion을 해 주므로, argument casting이 별로 필요 없습니다. 예를 들어, float fff(float f); .... float f1 = fff(1); 과 같이 해 주면 standard conversion rule에 의해 cast를 해 줍니다. (int 1 -> float 1.0). (헤헤, 아는 걸 괜히 말했나요?) 저는 괜한 casting은 안하는 편인데. (괜히 화면에 글자만 많아져서 치느라 팔아프고, 보느라 눈아프고...) 그리구, standard header 화일에 나와 있어야 할 function prototype을 C 화일에 쓰는 것도 좀 위험해 뵈구요. 이런 거 한번 잘못 쓰면 정말 고생하죠. (물론 환겅상 사정이 있어서 그러는 것은 어쩔 수 없지만) 이것은 저의 취향입니다. HellCat님 비꼬는 것은 절대 아녀요. 그저 건설적인 이야기를 해 보았을 뿐입니다. 오래간만에 CnUnix에 아는 게 올라와서 신나서 아는 척 좀 했습니다. :) 다 아는 거 괜히 말했더라도 귀엽게 봐 주세요... (우웩) ZZZZZZ zZZ eeee ooo zZ Eeee O O ZZZZZZ Eeee OoO |