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 new aufrufen.


Anmelden zum Antworten