2016-10-05 4 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

Прежде всего в C++ вы должны избегать указателей. Вы можете жить очень счастливо и делать очень хорошие программы без указателей. Во-вторых, если вы хотите создать массив во время выполнения, вместо этого вы должны использовать 'std :: vector'. –

+0

@LPs Он преобразует C в C++, это редкий случай, когда оба тега действительны. – Borgleader

+0

@Borgleader Между тем удалено;) – LPs

ответ

0

Очевидно, что я согласен с большинством комментариев по вашему вопросу, но если вам действительно нужны указатели в вашем коде, решение для вашей проблемы может выглядеть следующим образом.

Использование ЬурейеЕ спецификатор для определения типа:

typedef HashTableNode* PHashTableNode; 

А потом:

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

** Никогда никогда ** 'typedef указатель объекта. – Olaf

+1

* Никогда не говорите программистам на C++, чтобы никогда не делать что-то, потому что они будут делать это просто злобно. Посмотрите, как вы вдруг захотите сказать мне: никогда не говорите программистам на C++. Никогда не говорите другим программистам на C++, чтобы рассказывать другим программистам на C++: Никогда не делайте что-нибудь? Вот так порождает путаницу. – Dmitry

+0

@Dimitry К сожалению, вы на 100% прав – nosbor