2016-10-05 1 views
-1

이 내 구조 :이 C 라인을 해당 C++로 변환하는 방법?

struct HashTable{ 
     int tsize; 
     int count; //No. of elements in table 
     struct HashTableNode **Table; 
}; 

그리고 이것은 내가 뭘하려고 오전입니다 :

struct HashTable *h=(struct HashTable *)malloc(sizeof(struct HashTable)); 
if(!h) return NULL; 
h->tsize=size/LOAD_FACTOR; 
h->count=0; 
h->Table=(struct HashTableNode**)malloc(sizeof(HashTableNode *)*h->tsize);//this line 

을 나는 새 연산자를 사용하여 해당 C++ 버전으로 마지막 줄을 변환 할 수없는 오전

해결됨

이 코드를 다음으로 변경했습니다.

h->Table=new HashTableNode*[h->tsize]; 
for(int i=0;i<h->tsize;i++) 
    h->Table[i]=new HashTableNode; 

그리고 약간의 디버깅을 혼자서 해 보았습니다. 그것은 해결되었습니다.

감사합니다.

+3

먼저 ++는 포인터를 피해야한다

사용 형식 정의 지정자는 유형을 정의합니다. 당신은 매우 행복하게 살 수 있고 포인터없이 아주 좋은 프로그램을 만들 수 있습니다. 둘째, 런타임에 배열을 생성하려면 대신'std :: vector'를 사용해야합니다. –

+0

@LP 그는 C를 C++로 변환 중입니다. 두 태그가 모두 유효한 경우는 거의 없습니다. – Borgleader

+0

@ Borgleader 한편 삭제됨) – LPs

답변

0

분명히 귀하의 질문에 대부분의 의견에 동의하지만 코드에 포인터가 필요하면 문제의 솔루션이 아래처럼 보일 수 있습니다. 다음

typedef HashTableNode* PHashTableNode; 

그리고 : : C에서 모든

h->Table=new PHashTableNode[h->tsize]; 
+1

** 결코 ** ** 객체 포인터를 typedef하지 마라. – Olaf

+1

* 결코 C++ 프로그래머에게 * 결코 당신에게 무언가를하지 말라고 말하지 마십시오. 다른 C++ 프로그래머에게 다른 C++ 프로그래머에게 절대 한 번도 * 아무 것도하지 말라고 말하지 말자고 C++ 프로그래머에게 말하지 말라고 충고하십시오. 그것은 혼란이 번식하는 방법입니다. – Dmitry

+0

@Dimitry 불행히도 당신은 100 % 맞습니다. – nosbor

관련 문제