PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2016/06/05 00:16:09
Name Kaestro
Subject [질문] [프로그래밍]c++ 템플릿 변환 관련해서
오늘 8시에 눈 뜨고 부터 지금 하루 종일 작성하고 있는 코드가 있는데 도저히 실마리를 못잡겠어서 혹시나 실마리를 잡을 수 있을까 하여 질문드려봅니다. 현재 작성중인 코드는 Node를 이용해서 List, SortedList, Set 이렇게 세 가지의 일종의 data를 저장하는 클래스들을 관리하기 위한 Container를 작성하고 그 Container들의 기초적인 기능들을 구현한 뒤, 이들이 template 포맷으로 작동하게 변환하는 코드입니다.

쉽게 말해 List는 [ a, b, e, d, d, a ] , SortedList는 [ a, a, b, d, d, e ], Set는 [ a, b, d, e ] 이렇게 작성이 되어야 하며 이들을 받기 위한 pure virtual class Container를 구현하는 것인데 제가 어제 오늘 해서 완성한 부분은 여기까지고, 지금 난관을 겪고 있는 부분은 이겁니다.
class Container;

class Node {
        friend class Container;
        friend class List;

        friend ostream& operator <<(ostream &out, const Container &container);
        friend ostream& operator <<(ostream &out, Node &node) {
                out << node.c;
                return out;
        }

public:
        static int nNode();

private:
        Node(char c);
        Node(const Node& node);
        ~Node();

        Node *next;
        char c;

        static int n;
};

위에 작성된 코드가 바로 처음 제가 저 녀석들이 돌아가도록 char variable만을 가지는 Node입니다. 이걸 이제 template을 이용해서 작성해야 되는 건데 제가 가진 문법적인 지식을 가지고는 도저히 답을 못 찾겠습니다. 아까부터 문법책도 계속 읽어보고, 구글링도 계속 해보고 있는데 보통 friend function 하나, friend class 하나, template 하나 이렇게 구현되는 사례들을 제시하는데 이걸 다 짬뽕시켜 놓으니까 대체 뭘 어떻게 어떻게 하라는건지 모르겠네요. 작성해 보고 있는 건

#ifndef NODE_H
#define NODE_H
#include <iostream>
using std::ostream;

template <typename T>
class Container;

template <typename T>
class List;

template<typename T>
ostream& operator<< (ostream&, const Container<T>&);

template<typename T>
ostream& operator<< (ostream&, Node<T>&);

template<typename T>
class Node {
        friend class Container<T>;
        friend class List<T>;

        friend ostream& operator << <>(ostream &out, const Container<T> &container);

        friend ostream& operator << <>(ostream &out, Node<T> &node) ;

public:
        static int nNode();

private:
        Node(T c);
        Node(const Node& node);
        ~Node();

        Node *next;
        T c;

        static int n;
};

template<typename T>
std::ostream& operator<< <>(std::ostream& out, Node<T>& node) {
        out << node->c;
        return out;
}

이게 일단 현재 최신 수정본이네요. node를 변수로 받는 ostream이 out << node.c; 부분이 먹통인것만 해결되면 나머지는 다 해결인 것 같은데 여기서 이유를 모르고 꼼짝없이 붙들려버렸으니...끙

통합규정 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분씩 삽질하는게 태반입니다 ㅜㅜ
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
84187 [질문] 왕초보 헬스 질문글 [4] Senioritis2410 16/06/05 2410
84186 [질문] 남자의 거짓말(아가씨 스포가 될 수도 있음) [51] 닝기리닝닝4871 16/06/05 4871
84185 [질문] [프로그래밍]c++ 템플릿 변환 관련해서 [11] Kaestro1731 16/06/05 1731
84184 [질문] 인터넷이 이상하게 끊깁니다 [2] 삭제됨1549 16/06/04 1549
84182 [질문] finally format gogo ha nun girl ro ... [25] Ha.록3488 16/06/04 3488
84181 [질문] 미드는 아닌 것 같고, 시리즈 물인데 제목을 모르겠습니다. [4] 트루키3829 16/06/04 3829
84180 [질문] 그래픽카드 구매질문입니다 [7] 제이슨므라즈1789 16/06/04 1789
84179 [질문] 양산형 무협/판타지 소설 추천받습니다. 볼수있는곳도요. [7] lenakim3966 16/06/04 3966
84177 [질문] https://www.curse.com 뭐하는 사이트인가요? [1] 몽유도원3669 16/06/04 3669
84176 [질문] 이 밤 안주 추천 부탁드립니다. [10] 빌리진낫마이러버2017 16/06/04 2017
84175 [질문] 눈 아래에 피가 뛰는 느낌(?)이 듭니다. [11] 예비군1년차2252 16/06/04 2252
84173 [질문] 자동차 1단으로 주행시 질문입니다 [15] Mouse_pad4499 16/06/04 4499
84172 [질문] 네이버쪽인지 정확하게 모르겠지만 영상이 나오지가 않습니다. 키토3110 16/06/04 3110
84171 [질문] 차량 추천 질문입니다 [7] 시지프스1728 16/06/04 1728
84170 [질문] 은행 어플 앱 권한 관련 질문 [2] 조폭블루1821 16/06/04 1821
84169 [질문] 미세먼지 저감과 교통 신호 주기의 상관관계? [3] 어바웃타임1794 16/06/04 1794
84168 [질문] 차량 현금 구매 잔금은 언제까지 치뤄야 하나요? [1] 허느2152 16/06/04 2152
84167 [질문] [LOL] 씨잘알께 물어봅니다 [16] 딴딴3148 16/06/04 3148
84166 [질문] 영화 제목 질문 [3] Neo1768 16/06/04 1768
84164 [질문] [디아3] 확장팩또나오나요? [9] 도달자2425 16/06/04 2425
84163 [질문] 신안 여교사 성폭행 [23] PotentialVortex5728 16/06/04 5728
84162 [질문] 자동차 지식인 분들 질문이 있습니다 (티볼리 이상징후 관련) [4] Lady Brown2379 16/06/04 2379
84161 [질문] 페트병 가습기 세균 문제가 있을까요? [5] 성수4874 16/06/04 4874
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로