2010-12-28 3 views
3

У меня есть указатель на список в C:STL проблема список C

list<int> * pointer = (list<int> *)malloc(sizeof(list<int>)); 

когда я пытаюсь:

pointer->push_back(1); 

Я получаю сообщение об ошибке, потому что таНос не вызывает список конструктора. Я знаю, чтобы сделать это в C++ с:

list<int> * pointer = new list<int>(); 

но мне это нужно в c?

Кто-нибудь знает это решение?

+4

Это не имеет никакого смысла. В C нет даже классов или шаблонов. –

+7

'std :: list <>' является исключительной функцией для C++, а не C. И использование типа 'malloc' уничтожает точку со стандартными классами контейнеров в отношении управления памятью. Если вам нужно использовать 'std :: list <>', вы должны использовать C++. –

+0

Невозможно использовать STL в C – DReJ

ответ

7

Нет, потому что это разные языки. Просто потому, что только одна текстовая строка «++» после того, как общая буква в названии ничего не значит - это функциональный эквивалент попытки использования контейнера Java в Python.

Если вы хотите использовать STL, вам нужно использовать компилятор C++.

+0

ОК, большое спасибо – Nikola

+0

Не говоря уже о том, что у C нет шаблонов, которые используются в фрагменте кода (даже если предположить, что это не STL) –

0

Вы также можете использовать новую («размещение») версию(). для вызова конструктора на куске памяти, выделенного malloc().

/* allocate memory using malloc */ 
list<int> * pointer = (list<int> *)malloc(sizeof(list<int>)); 

/* invoke the C++ constructor using the placement version of new */ 
pointer = new(pointer) list<int>();