Fehlermeldung, Template
-
Hallo!
Könnt Ihr mit dieser Fehlermeldung etwas anfangen?
SimplePool.h: In member function ‘void SimplePool<T>::alloc(int)’:
SimplePool.h:93: error: there are no arguments to ‘malloc’ that depend on a template parameter, so a declaration of ‘malloc’ must be available
SimplePool.h:93: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)template<class T> void SimplePool<T>::alloc(int num) { unsigned siz=num*sizeof(T); malloc(siz); }Die Zeile mit dem malloc hängt doch von keinem Template-Parameter ab, sondern
nur jene mit siz=.. Die Klasse wird testhalber als globale Variable im
main.cpp wie folgt instanziert:SimplePool<TestClass> vertexSimplePool;
Die Methode macht so natürlich keinen Sinn. Ist nur ein minimales Beispiel.
-
Kann es sein, dass einfach das include von cstdlib fehlt?
-
Hier ist doch C++?
Warum dann malloc und nicht new?
-
Genau das steht ja auch in der Fehlermeldung.
t schrieb:
Die Zeile mit dem malloc hängt doch von keinem Template-Parameter ab, sondern
nur jene mit siz=..Da der Name "malloc" eben KEIN "abhängiger Name" ist, muss er an der Stelle wo das Template definiert wird bereits bekannt sein.
Und das ist er nicht, weil du ein #include vergessen hast.@Braunstein: jo, genau

-
f.-th. schrieb:
Hier ist doch C++?
Warum dann malloc und nicht new?Weil's ein Memory Pool ist, dessen Zweck das Vermeiden von new ist.
-
Braunstein schrieb:
Kann es sein, dass einfach das include von cstdlib fehlt?
Das ganze hat - instanziert aus einer anderen Klasse heraus - bereits
funktioniert, obwohl dort auch kein cstdlib inkludiert wurde. Das #include
ist dort wohl irgendwo 'quer' dahergekommen, daher habe ich nicht gleich
drauf geschlossen. Vielen Dank!
-
t schrieb:
f.-th. schrieb:
Hier ist doch C++?
Warum dann malloc und nicht new?Weil's ein Memory Pool ist, dessen Zweck das Vermeiden von new ist.
Hä?
Wieso ist new() mehr böse als malloc()?"Wieso läufst du?" - "Weil ich nicht rennen will!"
... hä?
-
hustbaer schrieb:
Hä?
Wieso ist new() mehr böse als malloc()?malloc() ruft Constructor/Destructor nicht auf. Das ist im vorliegenden Fall
erwünscht.
-
new char[size]...?
-
hustbaer schrieb:
new char[size]...?
Okay, das geht auch.
-
Oder einfach
operator newaufrufen.