PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/11/01 20:21:06
Name 녹차한잔
Subject c++ 좀 아시는분 봐주세요..
//stack.h
#include <iostream>
using std::cout;
using std::endl;

template <typename Object>
class LinkedStack {
protected:
        struct Node {
                Object element;
                Node* next;
                Node(const Object& e=Object(), Node *n=NULL) : element(e),next(n) {}
         };
        void removeAll();
        void copyFrom(const LinkedStack& ls);
private:
        Node *tp;
        int sz;
public:
        LinkedStack();
        int size() const;
        bool isEmpty() const;
        Object& top();
        void push(const Object& e);
        Object pop();
        LinkedStack(const LinkedStack& ls);
        LinkedStack& operator=(const LinkedStack& ls);
        ~LinkedStack();
};

//stack.cpp
#include "stack.h"

template <typename Object>
void LinkedStack<Object>::removeAll()
{
        while (!isEmpty())
           pop();
}
template <typename Object>
void LinkedStack<Object>::copyFrom(const LinkedStack& ls)
{
        tp=NULL;
        Node *p=ls.tp;
        Node *prev=NULL;
        while(p!=NULL) {
                Node *v=new Node(p->element, NULL);
        if(tp==NULL)
                tp=v;
        else
                prev->next=v;
        prev=v;
        p=p->next;
        }
        sz=ls.sz;
}
template <typename Object>
LinkedStack<Object>::LinkedStack()
{
        tp=NULL;
        sz=0;
}
template <typename Object>
int LinkedStack<Object>::size() const
{
        return sz;
}
template <typename Object>
bool LinkedStack<Object>::isEmpty() const
{
        return sz==0;
}
template <typename Object>
Object& LinkedStack<Object>::top()
{
        if(isEmpty())
                cout << "Top of empty stack" << endl;
        return tp->element;
}
template <typename Object>
void LinkedStack<Object>::push(const Object& e)
{
        Node *v=new Node(e,tp);
        tp=v;
        sz++;
}
template <typename Object>
Object LinkedStack<Object>::pop()
{
        if(isEmpty())
                cout << "Pop of empty stack" << endl;
        Node *old=tp;
        tp=tp->next;
        sz--;
        Object result = old->element;
        delete old;
        return result;
}
template <typename Object>
LinkedStack<Object>::LinkedStack(const LinkedStack& ls)
{
        copyFrom(ls);
}
template <typename Object>
LinkedStack<Object>::LinkedStack& operator=(const LinkedStack& ls)
{
        if(this!=ls) {
                removeAll();
                copyFrom(ls);
        }
        return *this;
}
template <typename Object>
LinkedStack<Object>::~LinkedStack()
{
        removeAll();
}

코드인데요.. 이거 선언/정의 를 같이 했을때는 에러없이 돌아가던 건데..
나눌려니까..에러나는데.. 제가 템플릿을 처음써봐서.. 그문제 같은데..
잘모르겠어서요.. 뭐가 에러일까요??


뱀다리>스택과 큐를 같이 사용할 수 있는 시나리오 있을까요?ㅠ

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
08/11/01 21:10
수정 아이콘
혹시 비쥬얼 스튜디오 버젼 몇 쓰시는지 알려주실수 있으신지?
녹차한잔
08/11/01 21:16
수정 아이콘
6입니다;
chowizard
08/11/01 21:28
수정 아이콘
본문을 cpp에 넣지 마시고, inl에 넣어보세요. inl은 비주얼 스튜디오에서 만들어주는 목록이 없기 때문에(제가 알기로는), 텍스트 파일 하나 만들어서 확장자를 inl로 바꿔주세요. cpp내용을 inl에 넣은 뒤, 헤더 맨 밑에는 inl 파일을 #include "xxx.inl"식으로 포함해주세요.
(6.0이 inl 제대로 인식하는지는 모르겠군요. 왠만하면 비주얼 스튜디오 2008쓰시길...익스프레스 에디션은 공짜로 다운받을 수 있어요.)
녹차한잔
08/11/01 21:29
수정 아이콘
2008익스에디션 깔려있긴한데요.. 그냥 6.0쓰던게 편해서;;
그냥 저게 구문상은 오류없는건가요?;; 왜안되지;; inl은 처음들어봐서 뭔지 잘 ㅠ;;
08/11/01 22:47
수정 아이콘
6에는 헤더분리시 템플릿 사용하면 컴파일에러나는 버그가 있다고 합니다. [제 친구가 실제로 겪었다고 하더라구요]

구문상 오류가 있다면 한꺼번에 집어넣었을때도 실행이 안됐을 것입니다.

한번 2008 에디션으로 분리해서 돌려보세요
08/11/01 23:30
수정 아이콘
템플릿은 헤더 파일에 원형과 구현코드가 모두 들어가는 것이 원칙입니다.
이건 어떤 컴파일러를 사용해도 마찬가지 입니다.
더 구체적으로 말해 보자면, 템플릿은 완전하지 않은 코드이기 때문이니다.
템플릿은 typename 이 어떤 것인 지 구체적으로 결정되는 컴파일 타이밍에 코드가 생성되며
이때 모든 원형과 구현을 요구합니다.
즉, 그것이 만족하지 않을 때에는 컴파일 에러를 발생시키죠.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
44413 재학생입영신청에 관해서 질문드립니다. [1] 일묘2089 08/11/02 2089
44412 컴퓨터 구매를 하려고 하는데... [2] 돌부처님1616 08/11/02 1616
44411 동성애에 관한 의문 [11] 브랜드뉴2536 08/11/02 2536
44410 신검 날짜에 대해서 답변 좀 부탁드립니다 [6] Muse2437 08/11/02 2437
44409 일본인의 화법에 관해서 잘아시는분 계신가요,,,? [3] buddha2503 08/11/02 2503
44408 모니터를 바꿨더니 영상이 [13] 릴리러쉬1881 08/11/02 1881
44407 군입대 날짜에 대해서 질문좀요 ㅠ(댓글로 질문 하나 추가요) [7] snut2097 08/11/02 2097
44406 중고컴퓨터 이정도가격 어떤가요? ㅠㅠ [7] ojh8810042097 08/11/02 2097
44404 미국 내 인종차별에 대해서.. [7] 이재열2421 08/11/02 2421
44403 유게에 있는 라모스 감독 짤방 관련해서 질문 드립니다. [7] skyk1845 08/11/02 1845
44402 이번 스타리그 결승전 끝나고 나오는 노래가 뭔가요? [1] 지휘자1922 08/11/02 1922
44401 컴퓨터 조립하기 쉽나요? [10] eros[zerg]2269 08/11/01 2269
44400 헌터헌터 26권은 언제쯤 나올까요? [12] BIONICcontrol.12486 08/11/01 2486
44399 스타 누구랑 하시나요? [8] 문근영2141 08/11/01 2141
44398 지금의 세계 경제위기를 '화폐시장'측면에서... 어떻게 볼 수 있을까요? [2] 파잇힝1570 08/11/01 1570
44397 헤드폰 추천 부탁드립니다^^ [6] HL선샤인1865 08/11/01 1865
44396 C++ 연산자 오버로딩 관련 질문입니다. [5] 루시리스2178 08/11/01 2178
44395 통계학에 대해서 질문입니다. [4] worcs1557 08/11/01 1557
44394 공무원 시험에 대해서 조언 부탁드립니다. [8] TOR[RES]1939 08/11/01 1939
44393 축구에서 수비수는 어떨때 공격에 가담하나요?? [13] 잘가라장동건2480 08/11/01 2480
44392 영어문장 하나 해석좀 해주세요~ [7] 졸린쿠키1542 08/11/01 1542
44391 저가브랜드 스킨화장품좀 추천해주세요. [10] MayBee2146 08/11/01 2146
44390 c++ 좀 아시는분 봐주세요.. [6] 녹차한잔1822 08/11/01 1822
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로