2016-03-23 2 views
-1

Мне действительно нужно это специально, так как я использую SWIG и вам нужно сделать трансляцию в соответствии с определением функции.Кастинг SomeType ** to SomeType * [] и наоборот

Определение функции принимает

SomeType const * const variable_name[] 

Кроме того, еще один вопрос будет быть- Как выделить память для

SomeType * variable[] = <??? using new or malloc > 

для x записей?

Edit:

Я искал довольно много, но я постоянно натыкаясь в пост, который выделяет память для SomeType** с использованием нового SomeType*[x] т.е.

SomeType** variable = new SomeType*[x]; 

Можете ли вы сказать мне способ сделать это?

ответ

1

Функция хочет массив из указателей.

Оператор:

SomeType * variable[]; 

Не допустимый синтаксис.

Вам потребуется:

SomeType * * variable; 

Объявляет указатель на указатель SomeType.

Вам необходимо выполнить выделение памяти в два этапа.
Во-первых, выделить массив указателей:

variable = new SomeType * [/* some quantity */]; 

Помните, что приведенное выше утверждение только выделяет место для указателей. Содержимое памяти все еще не инициализировано.

Во-вторых, выделите указатели на объекты.

for (unsigned int i = 0; i < some_quantity; ++i) 
{ 
    variable[i] = new SomeType; 
} 

При удалении, удалите содержимое массива до массива:

for (unsigned int i = 0; i < some_quantity; ++i) 
{ 
    delete variable[i]; 
} 
delete[] variable; 
+0

Ошибка компиляции на вашей первой строке - размер хранилища переменной не известен – rents

+0

@rents, Спасибо за обзор. Я решил проблему. –

0

Определение функции принимает

SomeType const * const variable_name[] 

Я не эксперт в C++, но если объявление массивов в параметрах функции такое же, как в C, то это синоним следующего Тип:

SomeType const * const * variable_name 

То есть массив в качестве параметра функции действительно указатель. Ваша книга должна была объяснить это на ранней стадии.


Я искал довольно много, но я постоянно натыкаясь в пост, который выделяет память для SomeType ** с использованием новой SomeType * [х] т.е.

SomeType** variable = new SomeType*[x]; 

Можете ли вы сказать мне способ сделать это?

Вы действительно можете выделить SomeType const * const *, используя для этого похожий код, чтобы вы ответили на свой вопрос. Я предполагаю, что вы могли бы также использовать std::vector<SomeType const * const> так:

std::vector<SomeType const * const> *foo = new std::vector<SomeType const * const>(); 
/* XXX: Add some items to the vector */ 
SomeType const * const *bar = &foo[0]; 

Это было бы полезно, если вы не знаете, сколько элементов foo должен содержать, и вы ожидаете, что расти.


Я не понимаю, почему люди больше не читают книги. Это самый быстрый и дешевый (если вы считаете, что стоимость человеко-часов) способ правильно учиться с уважаемой фигуры.

 Смежные вопросы

  • Нет связанных вопросов^_^