2013-09-06 3 views
0

그래서이 헤더 파일에는 ostream 을 사용하는 함수가 2 개 있고 간접적 인 연산자 (< <)를 오버로드하여 템플릿 목록 노드를 가리키는 포인터를 사용하여 파일에 쓸 수 있습니다. 여기 .H 파일 Ostream 미확인?

void PrintForward(ostream &out); 
void PrintBackward(ostream &out); 
ostream& operator<< (ostream &out, List<t> const* p); 

후 원형이다 .cpp 파일로부터

조작 함수 오버로딩

ostream& operator<< (ostream &out, ListNode::List const* p) 
{ 
    return out << *p; 
} 

Printforward 기능

template <typename T> 
void List<T>::PrintForward(ostream &out) 
{ 
    ListNode* lp = head; 

while(lp != NULL) 
{ 
    out << *lp->value; 
    lp = lp -> next; 
} 
} 

는 printBackward 기능

template <typename T> 
void List<T>::PrintBackward(ostream &out) 
{ 
    ListNode* lp = tail; 

    while(lp != NULL) 
    { 
     out << *lp; 
     lp = lp -> prev; 
    } 
} 

현재 내가 할 모든

error C2061: syntax error : identifier 'ostream' 

말 컴파일러 오류가 발생하지만 난 그것을 찾을 수 없습니다. 모든 기능을 .cpp 파일로 전환하기 전에 클래스 템플릿 사용시 템플릿 인수 목록이 필요하다는 다른 오류가 발생했습니다. 그러나 그것은 사라진 것으로 보인다.

+5

'#include '이 있습니까? 또한'네임 스페이스 std '를 사용하지 않아도된다면,'std :: ostream'이어야합니다. – Yuushi

+2

"ostream과 구문 오류가 있습니다."나는 그것이 컴파일러에서 말하는 것과 정확히 일치한다는 것을 알게되었습니다. 정확한 오류와 그 오류가 발생한 행을 게시하십시오. – stijn

+0

@Yuushi 사실 내가 # 을 포함하고 있는데, 내가 잘못하지 않으면 ostream도 포함됩니다. 나는 그것을 교체하고 단지 훨씬 더 큰 오류 목록을 얻기 위해 재구성했다. – user2754048

답변

0

: 운영자 < < 귀하의 선언은 사용 템플릿 클래스 t는 있지만, 두 번째 파라미터도 동일

template<class t> 
ostream& operator<< (ostream &out, List<t> const* p); 

선언 등이 템플릿 클래스를 선언하고,이 함수의 정의가 아니다 아니다 : 0

그렇지 않은 당신이 std 네임 스페이스를 사용하는 경우
ostream& operator<< (ostream &out, List<t> const* p); 
ostream& operator<< (ostream &out, ListNode::List const* p) 

마지막으로, 당신의 코드에서 모른다, 당신은 표준을 작성해야합니다 :: ostream에 클래스 전에, 다음과 같이 :

std::ostream& operator<< (std::ostream &out, List<t> const* p); 
std::ostream& operator<< (std::ostream &out, ListNode::List const* p) 
0

당신은 모든 코드를 게시하지 않은,하지만 난 당신이 표준으로 ostream에 자격을 갖춘되지 않습니다주의 사항 :이 코드에 많은 문제를 볼 수 있습니다

//.h 
std::ostream& operator<< (std::ostream &out, List<t> const* p); 

//.cpp 
//... 
// Either qualify with std, or bring it into scope by using namespace std...