static+array+templateparameter=linker fehler
-
ok, ich hab mal ausgetestet, was mit templateparametern noch für hacks möglich sind, ich hab mal getestet, ob es möglich ist, arrays bzw pointer einem template zu übergeben, compilen tuts auch...
template<float* a> class test{ public: test(){ *a=5.0f; } }; class c{ private: static float array[5]; public: c(){ test<array> d; } }; int main(){ c d; }
...nur beim linken macht er mir dann probleme:
C:\test\Debug\test.o(.text$_ZN1cC1Ev+0x12): In function `main': C:\test\test.cpp:21: undefined reference to `c::array' C:\test\Debug\test.o(.text$_ZN4testIXadL_ZN1c5arrayEEEEC1Ev+0x9):C:\test\test.cpp:21: undefined reference to `c::array'
auf der suche nach dem fehler wird aus
test<array> d;
ein
test<array+1> d;
und aus dem fehler wird:
test.cpp:16: error: `((&c::array) + 4)' is not a valid template argument test.cpp:16: error: it must be the address of an object with external linkage
mal flugs in die msdn geschaut:
Static class members have external linkage.
ok, den letzten fehler kann ich damit erklären, dass array das static verliert, wenn man auf das nächste element zugreift, aber das erstere muss rein theoretisch funktionieren...
achja, mit einer echten externen variable funktionierts(was nicht heissen soll, dass ich sowas benutzen will ;))
-
Du musst static Variablen immer noch außerhalb der Klasse definieren:
class c { ///... }; float c::array[5];
Der gcc kompiliert das ganze dann!
EDIT:Falsche Klammer gesetzt
-
ich bin so dumm
wochenlang mit solchen spielereien gearbeitet, und dann wenns mans braucht vergessen.
so, das 2. problem hat sich nun auch gelöst:
template<float* a,int i=0> class test{ public: test(){ a[i]=5.0f; } }; class c{ private: static float array[5]; public: c(){ test<array,1> d; } };
und nun könnt ihr mich flamen, dass ich absolut keinen skill hab, und zu dumm zum lernend er einfachsten regeln bin(das war nämlich nicht das erste mal, dass ich hier mit static probleme hatte
, und nein, auch nicht das 2. mal
)
also noch ein kleiner gelber zettel mehr an meinem tft:"static Variablen immer noch außerhalb der Klasse definieren"
-
Du poeser du :D. Mal ehrlich, wem ist das noch nicht passiert ;).
mfg
v RPS: Shade, Hume, Bashar, Volkard...ihr braucht euch natuerlich nicht melden