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


Log in to reply