error C2102 beim Erstellen eines Objekts



  • Hallo!

    Ich bekomme immer wieder beim Erstellen eines HashtabelleObjekts eine Fehlermeldung "error C2102: '&' erwartet L-Wert".
    Bin Einsteiger und kann den Fehler nicht erkennen. Hat jemand vielleicht einen Tipp für mich? Und überhaupt, ist mein Konstruktor in Ordnung?

    Danke schon mal.

    P.S. ich muss nach Aufgabenstellung stl list verwenden.

    #ifndef HASHTABLE
    #define HASHTABLE
    
    #include <list>
    #include "HashElement.h"
    
    template <typename T>
    class Hashtable {
    
    private:
      /** Array mit Listen */
      list< HashElement<T> >** table;
    
      /** Laenge des Arrays */
      int size;								
    
      /**
      * Ermittelt einen Hashwert aus einem Key
      * @return hashcode
      */
      int hashcode(const string key) const{
    	int hash = 0;
            //kommt noch was...
    	return hash;
      }
    
      /**
      * Initialisiert die Hashtabelle. hmm...
      */
      void init(){
    	  this->table = list< HashElement<T> > *[this->size];
    	  for(int i = 0; i < this->size; i++){
    		  this->table[i] = list< HashElement<T> >;
    	  }
      }
    
    public:
    	/** Konstruktor. */
    	Hashtable(int nsize){
    		this->size  = nsize;
    		init();
    	}
    
    	/** Destruktor. */
    	~Hashtable(){ 
    		delete[][] table; // ob das auch i.o ?
    	}
    
             ...
    
    };
    
    #endif
    

    HashElement.h

    #ifndef HASHELEMENT
    #define HASHELEMENT
    #include <string>
    
    template <typename T>
    class HashElement {
    
    public:
      string    key;
      T         value;
      int		hashValue;
    
      /**
      * Konstruktor.
      */
      HashElement(string key, T value, int hashValue){
    	this->key		= key;
    	this->value		= value;
    	this->hashValue = hashValue;
      }
    };
    
    #endif
    

    Test.cpp

    #include <iostream>
    #include "Hashtable.h"
    
    using namespace std;
    
    int main() {
    	Hashtable<int>* ht = & (new Hashtable<int>(4));  // hier Fehler! :(
    	//ht->put("abc", 123);
    
    	return 0;
    }
    


  • Hashtable<int>* ht = new Hashtable<int>(4);  // hier Fehler! :(
    

    Auch wenn ich bezweifle, dass du hier einen Zeiger brauchst.. Also eher so:

    Hashtable<int> ht (4);  // hier Fehler! :(
    


  • hmm... also wenn ich

    Hashtable<int> ht (4);
    

    verwende, dann wird mein Destruktor automatisch aufgerufen oder?



  • Ja, genau.

    Das wäre beim obigen Code dann auch noch ein Problem gewesen. Du gibst da den Speicher nicht frei.



  • Ok danke 🙂

    stimmt denn meine Methode init()? bekomme eine CompileFehlermeldung (Zeile 32)
    error C2059: Syntaxfehler: '[' 😕


Anmelden zum Antworten