Operator Überladen in Klassen-Template
-
Hallo!
Wieso funktioniert das nicht?
error: declaration of ‘operator[]’ as non-functiontemplate<class T> struct Pixel { typedef T value_t; ... value_t& operator[](size_t index) {assert(index>=0&&index<=3);return values[index];}; ... };
-
template<class T> struct Pixel { typename typedef T value_t; };
-
Ne, das funktioniert leider auch nicht.
-
#include <iostream> template<class T> struct Pixel { typedef T value_t; value_t& operator[](size_t index) { static int dummy; return dummy; }; }; int main() { Pixel<int> pixel; }Funktioniert bei mir.
-
size_t muss irgendwoher bekannt sein, so gehts beispielsweise auch:
#include <assert.h> #include <cstring> template<class T> struct Pixel { typedef T value_t; value_t& operator[](size_t index) {assert(index>=0&&index<=3);return values[index];} value_t values[3]; }; int main() { }
-
Dobi, danke!
Ich hab mir jetzt schon massenhaft Forenbeiträge und ein paar Bücher zum Thema Klassen Templates in Kombi mit operator-Überladungen durchgelesen.
Und woran liegts? An so einer dummen #include.
CodeBlocks hebt size_t hervor, genauso wie alle anderen primitiven Datentypen wie int oder double. Daher bin ich gar nicht auf die Idee gekommen, dass hier ein include fehlt.Danke nochmal!