2013-04-14 3 views
-1

단일 연결 목록이 있고이 구조에 새 요소를 추가하려고합니다.목록에 새 요소 추가


절차 코드에서 NULL을 가리키는 구조체와 헤드 포인터를 만듭니다. 이것은 내가 OO 코드에서이 문제를 해결하는 방법입니다 : 목록이 비어 있으면 내가 확인하고 있습니다 할 것이며, 경우, 설정 머리가 새로 만든 첫 번째 요소를 가리 키도록

typedef struct a { 
    int element; 
    struct a *next; 
} a; 
typedef struct b { 
    int element; 
    struct b *next; 
} b; 

class Foo { 
    a *a; // head for a structure = NULL at the beginning 
    b *b; // head for b structure = NULL at the beginning 

다음 일은.

내가하는 구조를 전달하고 싶기 때문에이 작업은 템플릿이어야합니다. 따라서 :

template <class T> void Addition_Struct::add(T head) 
{ 
    if(head == NULL) 
    { 
     head = (T*)malloc(sizeof(T)); 

     head->next = NULL; 
    } 
} 

그리고 지금 몇 가지 문제가 있습니다. 나는 T가 구조체의 타입이어야하고, 헤드 포인터 (NULL NULL)를 향해야한다고 생각한다. 컴파일러에서 malloc 줄에 cannot convert "a**" to "a*" 오류가 발생합니다. 뭐가 문제 야?

는 편집 :

샘플 함수 호출은 다음과 같습니다 당신은 당신의 템플릿 함수에 T의 의미를 혼동

add(this->a); 
+0

왜 C++을 사용하는 경우 태그를 "c"로 지정해야합니까? 그렇다면 왜'malloc'을 사용하고'new'를 사용하지 않는 걸까요? –

+0

yyou는'convertToStack'을 어떻게 호출합니까? –

+0

예, 코드를 변경하는 것을 완전히 잊었습니다 - 수정 됨, 죄송합니다. – user2252786

답변

0

.

예제 호출 add(this->a);에서 에 대한 포인터로 매개 변수를 고려하고 있습니다.

그러나 함수 head = (T*)malloc(sizeof(T));T을 구조체 유형으로 간주합니다. 포인터가 아닙니다.

T을 가리 키도록 템플릿 선언을 변경하십시오.

template <class T> void Addition_Struct::add(T * head)