Es gibt keine Argumente für memset die von einem Template abhängen
-
Hallo,
ich benutze memset, memcpy etc. in C++ (ich weiß dass das nicht gut ist).
Dennoch möchte ich den Code kompilieren.Ich bekomme als fehlermeldung
Fehler: es gibt keine Argumente für »memset«, die von einem Templateparameter abhängen, weshalb eine Deklaration von »memset« verfügbar sein musskönnte ihr ohne code damit was anfangen? liegt das an einem fehlendem include?
danke
-
afaiko schrieb:
könnte ihr ohne code damit was anfangen? liegt das an einem fehlendem include?
vermutlich. Vielleicht auch nicht.
Deine Frage zeigt schon, dass du dir denken kannst, dass es mit Code einfacher wäre. Warum postest du ihn dann nicht??
-
Deine Frage zeigt schon, dass du dir denken kannst, dass es mit Code einfacher wäre. Warum postest du ihn dann nicht??
weil er viel zu lang wäre (>10k). Anbei ein Minimalbeispiel was den Fehler reproduziert
using namespace std; template < class T > class Klasse{ public: Klasse<T>() { lines = new int[5]; memset(lines,0,5*sizeof(int)); } private: int* lines; }; int main () { Klasse<double> myclass(); }
-
Klasse<double> myclass();Ist eine Funktionsdeklaration, keine Instanziierung. Dein Minimalbeispiel reproduziert den Fehler also nicht.
Wenn ich das korrigiere und das include für memset benutze, kompiliert es bei mir (VC2010):
#include <cstring> // Vermutlich fehlte dir einfach das hier. using namespace std; template <class T> class Klasse { public: Klasse<T>() { lines = new int[5]; memset(lines,0,5*sizeof(int)); } private: int* lines; }; int main () { Klasse<double> myclass; }
-
jup, ganz ohne header kommt man halt doch nicht aus
<cstring> enthält std::memset - im Zweifel einfach auf cplusplus.com suchen und auf der entsprechenden Seite nachschauen, welcher Header benötigt wird.
-
Danke euch, *grmpf, auf string.h bin ich net gekommen

Es funktioniert hier auch mit gcc v. 4.5
-
afaiko schrieb:
Danke euch, *grmpf, auf string.h bin ich net gekommen

string.h ist ja auch kein C++, sondern ein C-Header. Für C++ wäre das dann <cstring>, wie oben gesagt
-
Sorry, ich hatte zuerst string.h geschrieben, weil ich hier geguckt hatte: http://www.cplusplus.com/reference/clibrary/cstring/memset/
Habs dann aber noch geändert, weil ich dann hier nachsah: http://en.cppreference.com/w/cpp/string/byte/memset

-
Dobi schrieb:
Sorry, ich hatte zuerst string.h geschrieben, weil ich hier geguckt hatte: http://www.cplusplus.com/reference/clibrary/cstring/memset/
Da steht doch auch <cstring> rechts neben memset. Und oben in der Titelleiste. das string.h nur in Klammern

-
Oh, tatsächlich. Ich hatte die Zeile direkt aus dem Beispiel kopiert.