Template in class?
-
Kann man so 'ne fkt in eine Klasse wrappen? Ansonsten muss ich mein vector global machen.
template<typename T> bool GetPlayerData(const T & data, T PlayerClass::* classMember, PlayerClass & pClass, const TPlayerVector & myVector ) { myVectorConstItr Itr; myVectorConstItr ItrEnd; Itr = myVector.begin(); ItrEnd = myVector.end(); for (; Itr != ItrEnd; ++Itr ) { if((*Itr).*classMember == data) { pClass = *Itr; return true; } } return false; }
-
Mein versuch..
#include <string> #include <vector> template <typename T> class SkillManager { public: bool GetSkillData(const T &id, T SkillManager<T>::* idMember, SkillManager<T> &theClass, const tSkillManager & myVector); private: typedef std::vector < SkillManager > tSkillManager; typedef typename tSkillManager::iterator tSkillItr; typedef typename tSkillManager::const_iterator tSkillConstItr; tSkillManager skillManager; tSkillItr skillItr; tSkillConstItr skillConstItr; };#include "SkillManager.hpp" template<typename T> bool SkillManager<T>::GetSkillData(const T &id, T SkillManager<T>::* idMember, SkillManager<T> &theClass, const tSkillManager & myVector) { }SkillManager.hpp(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int killManager.hpp(19) : see reference to class template instantiation 'SkillManager<T>' being compiled SkillManager.hpp(8) : error C2143: syntax error : missing ',' before '&' SkillManager.hpp(8) : see declaration of 'SkillManager<T>::GetSkillData' definition 'bool SkillManager<T>::GetSkillData(const T &,T SkillManager<T>::* ,SkillManager<T> &,const std::vector<SkillManager<T>> &)' existing declarations 'bool SkillManager<T>::GetSkillData(const T &,T SkillManager<T>::* ,SkillManager<T> &,const int)' error C4430: missing type specifier - int assumed. Note: C++ does not support default-int SkillManager.hpp(19) : see reference to class template instantiation 'SkillManager<T>' being compiled SkillManager.hpp(8) : error C2143: syntax error : missing ',' before '&'
-
Dann muss ich mein vector wohl global machen..
-
huihui schrieb:
Dann muss ich mein vector wohl global machen..
aha?
templates kann man nicht in header und source aufteilen - siehe auch faq...bb
-
unskilled schrieb:
huihui schrieb:
Dann muss ich mein vector wohl global machen..
aha?
templates kann man nicht in header und source aufteilen - siehe auch faq...bb
ty.. ganz vergessen.. kriegs aber immernoch nicht zum laufen

template <typename T> class SkillManager { public: bool GetSkillData(const T &id, T SkillManager<T>::* idMember, SkillManager<T> &theClass, const tSkillManager & myVector) { } private: typedef std::vector < SkillManager > tSkillManager; typedef typename tSkillManager::iterator tSkillItr; typedef typename tSkillManager::const_iterator tSkillConstItr; tSkillManager skillManager; tSkillItr skillItr; tSkillConstItr skillConstItr; };SkillManager.hpp(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int SkillManager.hpp(22) : see reference to class template instantiation 'SkillManager<T>' being compiled error C2143: syntax error : missing ',' before '&' SkillManager.hpp(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int SkillManager.hpp(22) : see reference to class template instantiation 'SkillManager<T>' being compiled error C2143: syntax error : missing ',' before '&'
-
T SkillManager<T>::* idMemberOo
was willst du denn nun wirklich machen?
-
unskilled schrieb:
T SkillManager<T>::* idMemberOo
was willst du denn nun wirklich machen?
guggste 1st post, will die fkt in einer klasse haben.
-
huihui schrieb:
unskilled schrieb:
T SkillManager<T>::* idMemberOo
was willst du denn nun wirklich machen?
guggste 1st post, will die fkt in einer klasse haben.
ich hab deinen ersten post schon noch mal angeguckt gehabt, bevor ich fragte - entweder, du sagst genau, was du machen möchtest, oder ich kann dir auch nicht helfen - weil davon werd ich nicht schlauer... imho versuchst du dort etwas, was nicht wirklich geht - aber wie gesagt, beschreib mal noch ma, was du machen möchtest
bb
-
Ein Zeiger auf einen Member - geht, finde ich aber äußerst ungewöhnlich. Vielleicht gibt's da auch einen anderen, besseren Weg? Vor allem, weil du ja einen std::vector<SkillManager> übergeben willst - und auf die Member von SkillManager kannst du ja auch einfach direkt zugreifen.

Dein aktuelles Problem ist, dass das typedef tSkillManager erst nach der Definition von GetSkillData() von dir gesetzt wird, es aber schon in der Parameterliste von GetSkillData() verwendet wird.
So sollte es funktionieren:
template <typename T> class SkillManager { typedef std::vector < SkillManager > tSkillManager; typedef typename tSkillManager::iterator tSkillItr; typedef typename tSkillManager::const_iterator tSkillConstItr; public: bool GetSkillData(const T &id, T SkillManager<T>::* idMember, SkillManager<T> &theClass, const tSkillManager & myVector) { // dein Code } private: tSkillManager skillManager; tSkillItr skillItr; tSkillConstItr skillConstItr; };Du solltest auch noch darüber nachdenken, ob du nicht das typedef tSkillManager öffentlich machen willst - in einer öffentlichen Funktion verwendest du es eh schon.