problem mit template
-
hi
ich habe eine templateklasse geschrieben und kann sie ohne fehler compilen.
ich kann auch ohne problem ein objekt von ihr erstellen.aber sobalt ich eine funktion aufrufe gibt es fehler.
code der mainfunktion
Dynar<int> a; a(21);
funktion
template<class T> bool Dynar<T>::operator()(T& elem){ //noch genug platz reserviert if(m_uiElems<m_uiMaxBuffer){ m_uiElems++; m_pData[m_uiElems-1]=elem; return true; }; //neuen speicher anfordern if(DarAlloc(10)){ //erfolgreich speicher angefordert: element hinzufügen return *this(elem); }else{ //wenigstens speicher fürein objekt anfordern if(DarAlloc(1)){ //erfolgreich speicher angefordert: element hinzufügen return *this(elem); }; }; //fehler beim speicher anfordern return false; };
fehler
error: no match for call to `(Dynar<int>) (int)' note: candidates are: bool Dynar<T>::operator()(T&) [with T = int]
wieso klappt es nicht?
ich habe eine funktion die einen int erwartet, übergebe ihr ein int und es klappt nicht....bitte helft mir
danke
-
Weil du eine nicht-konstante Referenz als Parameter empfange willst, beim Aufruf aber temporäres Objekt übergibst. Die "21" kann nicht als Referenz übergeben werden.
Mach aus dem Parameter einfach eine "T const&" und es passt wieder.
-
Du willst da eine non-const Referenz auf ein Literal machen.. Das geht natürlich nicht.
Nimm doch einfach eine Kopie:
bool Dynar<T>::operator()(T elem)
-
ok jetzt klappt es
danke