2010-12-28 13 views
3

Ich habe Listenzeiger in C:STL Liste Problem C

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

, wenn ich versuche:

pointer->push_back(1); 

-I-Fehler erhalten, weil malloc nicht Liste Konstruktor nicht aufrufen. Ich weiß, dies in C++ zu tun mit:

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

aber ich brauche das in c?

Kennt jemand Lösung dafür?

+4

Das ergibt keinen Sinn. C hat nicht einmal Klassen oder Vorlagen. –

+7

'std :: list <>' ist eine Funktion, die nicht in C, sondern in C++ enthalten ist. Und die Verwendung von 'malloc' zerstört die Standard-Container-Klassen in Bezug auf die Speicherverwaltung. Wenn Sie 'std :: list <>' verwenden müssen, müssen Sie C++ verwenden. –

+0

Es gibt keine Möglichkeit, STL in C – DReJ

Antwort

7

Nein, weil dies verschiedene Sprachen sind. Nur weil man nur die Textzeichenfolge "++" hat, nachdem ein gewöhnlicher Buchstabe im Namen nichts bedeutet - dies ist das funktionale Äquivalent zum Versuch, einen Java-Container in Python zu verwenden.

Wenn Sie STL verwenden möchten, müssen Sie einen C++ - Compiler verwenden.

+0

ok, vielen Dank – Nikola

+0

Nicht zu vergessen, dass C keine Templates hat, die im Code-Snippet verwendet werden (auch wenn es nicht STL ist) –

0

Sie können auch die "Placement" -Version von new() verwenden. um den Konstruktor für einen von malloc() zugewiesenen Speicherblock aufzurufen.

/* 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>();