2012-12-09 2 views
0

멤버 함수 정의의 일부 코드에 문제가 있습니다.템플릿 클래스의 새 구조체에 대한 C++ 구문

//This is a private type 
struct node { 
node *next; 
node *prev; 
T  *o; 
}; 

.cpp 파일에서 오류를 생성하는 코드 : 내가 구조체를 선언하기위한 올바른 구문라고 생각

template <typename T> 
void Dlist<T>::function(T *o) 
{ 
node newV = new node; 
.... 
} 

내가있어 "".H 파일에서

노드는이 범위 "오류가 선언되지 않았습니다 내가 노력 그리고

:.

Dlist<T>::node *victim; 

그리고 "newV가이 범위에서 선언되지 않았습니다"오류가 발생했습니다.이 오류는 줄 자체가 선언이므로 더 이상 혼란 스럽습니다.

.h 파일 내에 .cpp가 포함됩니다.

도움을 주시면 감사하겠습니다.

+3

문제를 재현하는 최소한의 코드를 게시 할 수 있습니까? – juanchopanza

답변

2

new XX에 대한 포인터를 반환, 그래서 당신은 node*new node에 대한 호출의 결과를 할당하지 않는 node이 필요합니다

template <typename T> 
void Dlist<T>::function(T *o) 
{ 
    node* newV = new node; 
.... 
} 

는 예를 들어 here를 참조하십시오.

동적으로 할당 된 객체에 원시 포인터를 사용하는 것은 매우 까다로워서 메모리 관리 오류가 발생합니다. smart pointers을 사용하거나 자동으로 할당 된 변수 (비 포인터)를 사용하는 것이 좋습니다.

struct node { 
    std::unique_ptr<node> next; 
    std::unique_ptr<node> prev; 
    std::unique_ptr<T>  o; 
}; 
+0

만약 그 남자가 포인터에 대해서 모른다면, 지옥에서 자기 자신의 기억을 관리하는 것에 대처할 방법이 없습니다. 아니 스마트 포인터 -> downvote. – Puppy

+0

@DeadMG 즉각적인 문제를 해결하려고했습니다. 나는 스마트 포인터에 대해 뭔가를 추가 할 것이다. – juanchopanza

관련 문제