:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
16/06/05 03:11
우선 template<typename T=""> 에서 =""는 들어갈 필요 없구요. node.c의 타입이 어떻게 되는건지 모르겠지만 아래 Node에는 변수 c가 없네요.
16/06/05 05:29
너무 길어지니까 이게 아랫부분이 짤리나보네요. 너무 오래 코드를 봤더니 정신이 나간 모양입니다. 저것도 눈치를 못채고. 말씀하신부분은 너무 길어서 가독성이 별로지 않나 싶어서 자르고 올렸는데 다시 넣어놨습니다.
16/06/05 06:27
지금 안 되는 이유는 friend function이 Node의 멤버가 아니라 external function인데 그 definition이 Node class 안에 있어서일 겁니다. 그런데 그거 말고도 고치셔야 할 점이 여기저기 있네요.
16/06/05 06:50
external function인데 definition이 Node class안에 있어서라고 하시는건
//////header///// template<typename T> ostream& operator<<(ostream&, Node<T>&); template<typename T> class Node { /*중략*/ friend ostream& operator<< <>(ostream&, const Node&); }; /////cpp//// template<typename T> std::ostream& operator<< <>(std::ostream& out, const Node<T>& node) { out << node->c; return out; } 이런 식으로 짜보라는 말씀이시려나요? 해봤는데 결과가 똑같아서 포기했던 방법인데 external function이라는게 member function이 아니라는 얘기인지는 알겠는데 그렇다고 이게 char기반일때는 안에서 되고 template 기반일때는 안에서 안되는 이유도 잘 이해가 안되네요. 보통 이렇게 글로 쓰다보면 아 맞다 하고 고치러 가는데 이게 대체 몇시간짼지
16/06/05 13:03
몇 시간째 하고 계신다고 그러셨는데.. 자동차 사서 뭐가 안 돌아간다고 매뉴얼도 제대로 안 읽고 이거 저거 막 누르면 잘 안 고쳐지겠죠. 연습은 설명을 이해하기 위해서 하는 거고 책을 읽는 게 처음엔 지루해도 시간 낭비를 많이 줄일 수 있다고 생각합니다.
굳이 돌아가게 하려면 cpp에 있는 거 header Node template class 앞으로 옮기시고, 그 앞에 template<typename T> class Node; 와 같이 forward declaration을 넣으시면 됩니다.
16/06/05 13:28
이게... 제가 지금 혹시 아무 내용도 안 읽고 했다고 생각하는거면 그런건 아닌게 책에 있는 내용정도는 전부 구현해 봤고, 책도 지금 세번씩 읽어 본 거고, 수업시간에 했던 실습과제도 다 제출해서 냈고, 구글에서 뒤져본 기반으로 있는 내용도 구현해봤고, 말씀해보신 것하고 아래 있는 것도 다 구현해봤거든요. 메뉴얼도 안 읽어보고 이것저것 막 눌러보는 수준은 저도 아닙니다.
지금 하다보니까 저기보단 다른데도 문제가 많아서 안 돌아가는게 맞는 모양이라 다시 짜보려고 합니다. 메뉴얼도 안읽어봤다는 비유를 들으니까 뭔가 좀 울컥하네요. 제가 그정도도 확인하지 않고서 질문하고 다닐정도로 양심없는 녀석은 아닙니다... 그리고 혹시 제가 수정해놨다는 것 가지고서 저거 자체가 틀렸다고 생각하시는 거면, 저것도 찾아보면 더 효율이 좋은 코드라고 해서 더 simple한 환경으로 돌려봤거든요.
16/06/05 13:45
그것만 보고 하는 얘기는 아닙니다. 드러난 설계 전체를 보고 드린 말씀이에요. 그리고 질문하신 분을 무시하려던 의도도 없습니다. 일반적으로 성실한 대부분의 학생들이 그런 접근을 취한다고 느껴 왔고, 일반적인 조언을 드리려던 것이었습니다.
16/06/05 14:09
그럴 의도로 말씀하신게 아니란건 알았는데도 제가 감정적인 상태를 못이겨서 말을 심하게 한 것 같네요. 죄송합니다.
그리고 주신 답변도 답중 하나는 맞는 것 같은데 제가 가진 문제가 너무 심각했었고 질문을 못할 정도로 가닥을 못잡은 것 같습니다. 계속해서 답변해주셔서 감사합니다.
16/06/05 11:06
http://coliru.stacked-crooked.com/a/fe7190c3870e2a87
달라진 부분 확인해보시면 어디가 문제였던건지 아시게 될겁니다.
16/06/05 11:56
좋은 답변 감사드립니다. 방금 시도해봤는데 Derived Class의 default constructor만 불러도 '확인할 수 없는 외부 참조입니다.'라는 에러 메시지가 나오는 걸 봐선 제가 생각한 저 부분 외에도 심각한 문제가 있었던 모양이라 아마 저부분 말고도 코드를 아예 베이스부터 다시 깔아만들어야 될 모양입니다.
이번 학기 이 수업 공부는 하면 할수록 우울해지네요. 공부는 자신 있다고 생각했는데 뭐가 좀 늘어서 잘 된다 싶으면 계속 손을 못대는 문제들이 나와서 밤만 새고 있으면 내가 이렇게 못난 놈이었나 하는 자괴감만 계속 느는 것 같습니다... 그래도 한발짝 나아진 것 같으니 마저 노력해보겠습니다. 정말 감사합니다.
16/06/05 12:36
이건 C++ 잘못이니 너무 낙담하지 않으셔도 됩니다. 매일 C++ 쓰는 사람들도 컴파일 에러 하나 고치려고 2~30분씩 삽질하는게 태반입니다 ㅜㅜ
|