Zum Inhalt springen

Akasya

Mitglieder
  • Gesamte Inhalte

    7
  • Benutzer seit

  • Letzter Besuch

Beiträge von Akasya

  1. ok, das habe ich eingefügt

    aber wie gesagt, danach bekomme ich 40 fehler:

    --------------------Konfiguration: Hashing - Win32 Debug--------------------

    Kompilierung läuft...

    Article.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(20) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(20) : error C2501: 'Article' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(20) : error C2501: 'articles' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(29) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(31) : error C2061: Syntaxfehler : Bezeichner 'Article'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(33) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(33) : error C2501: 'Article' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(33) : error C2501: 'getArticle' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(35) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(50) : error C2061: Syntaxfehler : Bezeichner 'Article'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2501: 'Article' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2059: Syntaxfehler : ';'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2065: 'size' : nichtdeklarierter Bezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(71) : error C2954: Vorlagendefinitionen koennen nicht verschachtelt werden

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(72) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(89) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(36) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(36) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(114) : error C2061: Syntaxfehler : Bezeichner 'Article'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(115) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(115) : error C2501: 'Article' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(115) : error C2501: 'retrieve' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(123) : error C2061: Syntaxfehler : Bezeichner 'Article'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(260) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(260) : error C2501: 'Article' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(260) : error C2086: 'Article' : Neudefinition

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(260) : error C2059: Syntaxfehler : ';'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(260) : error C2065: 'modFac' : nichtdeklarierter Bezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(289) : error C2954: Vorlagendefinitionen koennen nicht verschachtelt werden

    main.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(29) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(35) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(72) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(89) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(36) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(36) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(119) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(29) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(28) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<2>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(35) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(28) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<2>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(36) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(36) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    Fehler beim Ausführen von cl.exe.

    Hashing.exe - 40 Fehler, 0 Warnung(en)

  2. Das habe ich nun eingebaut. ich habe noch zwei fehler

    Kompilierung läuft...

    Article.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(319) : fatal error C1004: Unerwartetes Dateiende gefunden

    main.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(319) : fatal error C1004: Unerwartetes Dateiende gefunden

    Fehler beim Ausführen von cl.exe.

    Hashing.exe - 2 Fehler, 0 Warnung(en)

  3. Dadurch, dass du in bucket.h das uint-Define benutzt, das in dynamic_hashing.h gesetzt wird, musst du überall, wo du bucket.h einbindest, vorher dynamic_hashing.h einbinden. Offenbar ist das irgendwo nicht passiert.

    :) danke, ich habe jetzt nur noch zwei fehler

    Kompilierung läuft...

    Article.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(8) : warning C4182: Die #include-Verschachtelungsebene ist 362 tief; Endlosschleife moeglich

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(8) : fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugeben

    main.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(8) : warning C4182: Die #include-Verschachtelungsebene ist 362 tief; Endlosschleife moeglich

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(8) : fatal error C1076: Compiler-Beschraenkung: Interne Heap-Grenze erreicht; Verwenden Sie /Zm, um eine hoehere Grenze anzugeben

    Fehler beim Ausführen von cl.exe.

    Hashing.exe - 2 Fehler, 2 Warnung(en)

  4. uups, sorry, habe es gar nicht gesehen.

    anbei dynamic_hashing.h

    
    #define ulint unsigned long long int
    
    #define uint unsigned int
    
    
    #include <string>
    
    #include <fstream>
    
    #include <cstdio>
    
    #include "Bucket.h"
    
    #include "RadixTrie.h"
    
    #include "Article.h"
    
    #include "Dynamic_Hashing_Exception.h"
    
    
    using namespace std;
    
    
    
    template <uint size, uint modFac>
    
    class Dynamic_Hashing
    
      {
    
      private:
    
        string fileName;
    
        fstream fileStream;
    
    
    
        Bucket<size> buck;
    
        RadixTrie radi;
    
    
        int hash(int a)
    
        {
    
          return a % modFac;
    
        }
    
    
        ulint getBucketPos(ulint bucketNumber)
    
        {
    
          return size * Article::getSize() * bucketNumber;
    
        }
    
    
      public:
    
        Dynamic_Hashing(string name)
    
        {
    
          fileName = name;
    
          fileStream.open(fileName.c_str(), ios::in | ios::out | ios::binary | ios::ate);
    
          if (!fileStream.is_open())
    
            {
    
              fstream createFile;
    
              createFile.open(fileName.c_str(), fstream::out |fstream::binary);
    
              try
    
                {
    
                  buck.write(createFile,0);
    
                }
    
              catch (Dynamic_Hashing_Exception ex)
    
                {
    
                  cout << ex.getMessage() << "  " << ex.getCause() << endl;
    
                }
    
    
              createFile.flush();
    
              createFile.close();
    
            }
    
          else
    
            {
    
    
              // getting the file size
    
              uint fileSize = fileStream.tellg();
    
              // getting number of article
    
              int artNum = fileSize/Article::getSize();
    
    
              Article * arti[artNum];
    
    
    
              // resetting filePointer
    
              fileStream.seekg(ios::beg);
    
    
              // getting articles
    
              for (int i = 0; i < artNum; i++)
    
                {
    
                  Article * a  = new Article(fileStream);
    
                  arti[i] = a;
    
                }
    
    
              fileStream.close();
    
    
              remove(fileName.c_str());
    
    
              fstream createFile;
    
              createFile.open(fileName.c_str(), fstream::out |fstream::binary);
    
    
              buck.write(createFile,0);
    
              createFile.flush();
    
              createFile.close();
    
    
    
    
    
              //writin' all 'em  real ones back
    
              for (int i = 0; i < artNum; i++)
    
                {
    
                  if (arti[i]->getArticleNumber() != 0)
    
                    {
    
                      insert(arti[i]);
    
                    }
    
                }
    
    
    
    
            }
    
    
          fileStream.flush();
    
          fileStream.close();
    
        }
    
    
        void insert(Article * art);
    
        Article * retrieve(int artNum);
    
        void display();
    
    
    
      };
    
    
    
    template <uint size, uint modFac>
    
    void Dynamic_Hashing<size,modFac>::insert (Article * a)
    
    {
    
    
    
      if (retrieve(a->getArticleNumber()) != NULL)
    
        {
    
          cout << "Article with Article Number " << a->getArticleNumber() << " already exists!" << endl;
    
          return;
    
        }
    
    
      cout << "inserting Article with Hash " << hash(a->getArticleNumber()) << endl;
    
    
      if (a->getArticleNumber() == 0)
    
        {
    
          throw Dynamic_Hashing_Exception("Article Number musst not be 0!");
    
        }
    
    
      fileStream.open(fileName.c_str(), ios::in | ios::out | ios::binary);
    
      if (!fileStream.is_open())
    
        {
    
          throw Dynamic_Hashing_Exception("i/o exception while opening file");
    
        }
    
    
    
      int buckNum;
    
    
      //retrieving bucket
    
      if (radi.getExtNodeCount() == 1)
    
        {
    
          buckNum = 0;
    
        }
    
      else
    
        {
    
          buckNum = radi.retrieve(hash(a->getArticleNumber()));
    
        }
    
      int curDepth = radi.getSearchDepth();
    
    
      // get the bucket
    
      buck.read(fileStream,getBucketPos(buckNum));
    
    
    
      //ist the bucket full?
    
      if (!buck.isFull())
    
        {
    
          //no
    
          //insert adress in bucket->done
    
          buck.addArticle(a);
    
          try
    
            {
    
              buck.write(fileStream, getBucketPos(buckNum));
    
            }
    
          catch (Dynamic_Hashing_Exception e)
    
            {
    
              //todo
    
              cout << "Dynamic_Hashing_Exception: writing bucket" << endl;
    
            }
    
        }
    
      else
    
        {
    
          //yes
    
          Bucket<size> newBuc;
    
          Bucket<size> oldBuc;
    
          //split buckets
    
          for (int i = 0; i < size; ++i)
    
            {
    
              Article * art = buck.getArticle(i);
    
              if ((hash(art->getArticleNumber()) >> curDepth) & 1 == 1)
    
                {
    
                  newBuc.addArticle(art);
    
                }
    
              else
    
                {
    
                  oldBuc.addArticle(art);
    
                }
    
    
            }
    
    
          bool wasFull = false;
    
          // add new article to right bucket
    
          if ((hash(a->getArticleNumber()) >> curDepth) & 1 == 1)
    
            {
    
              if(!newBuc.isFull())
    
                {
    
                  newBuc.addArticle(a);
    
                } 
    
              else
    
                {
    
                    wasFull = true;
    
                }
    
            }
    
          else
    
            {
    
              if(!oldBuc.isFull())
    
                {
    
                  oldBuc.addArticle(a);
    
                }
    
              else
    
                {
    
                    wasFull = true;
    
                }
    
            }
    
    
    
    
    
          int newBuckNum = radi.getExtNodeCount();
    
    
          oldBuc.write(fileStream, getBucketPos(buckNum));
    
          newBuc.write(fileStream, getBucketPos(newBuckNum));
    
    
    
          if(wasFull)
    
            { 
    
              if ((hash(a->getArticleNumber()) >> curDepth + 1) & 1 == 1) {
    
    
                radi.insert(hash(a->getArticleNumber()),buckNum);
    
              } else {
    
                radi.insert(hash(a->getArticleNumber()),newBuckNum);
    
             }
    
              this->insert(a);
    
            }
    
          else 
    
            {
    
              radi.insert(hash(newBuc.getArticle(0)->getArticleNumber()),newBuckNum);
    
            }
    
    
    
        }
    
    
      fileStream.flush();
    
    
      fileStream.close();
    
    
    };
    
    
    
    template <uint size, uint modFac>
    
    Article * Dynamic_Hashing<size,modFac>::retrieve (int artNum)
    
    {
    
      int buckNum = radi.retrieve(hash(artNum));
    
    
      fileStream.open(fileName.c_str() ,ios::binary | ios::in | ios::out);
    
      if (!fileStream.is_open())
    
        {
    
          throw Dynamic_Hashing_Exception("i/o exception while opening file");
    
        }
    
    
    
      buck.read(fileStream,getBucketPos(buckNum));
    
    
      fileStream.flush();
    
      fileStream.close();
    
    
      for (int i = 0; i < buck.getCurrentArticles(); ++i)
    
        {
    
          Article * a = buck.getArticle(i);
    
          if (a->getArticleNumber() == artNum)
    
            {
    
              return a;
    
            }
    
    
        }
    
    
      return NULL;
    
    }
    
    
    template<uint size, uint modFac>
    
    void Dynamic_Hashing<size,modFac>::display()
    
    {
    
      fileStream.open(fileName.c_str() ,ios::binary | ios::in | ios::ate);
    
      // getting the file size
    
      ulint fileSize = fileStream.tellg();
    
      // getting number of article
    
      int artNum = fileSize/Article::getSize();
    
    
    
      // resetting filePointer
    
      fileStream.seekg(ios::beg);
    
    
      // getting articles
    
      for (ulint i = 0; i < artNum; i++)
    
        {
    
          if( i == 0) {
    
            cout << "Bucket " << i << endl;
    
          }
    
          else if(i % size == 0) {
    
            cout << "Bucket " << i / size << endl;
    
          }
    
          Article * a  = new Article(fileStream);
    
          a->display();
    
        }
    
    
      fileStream.close();
    
    
    
    }
    
    
    
    bucket.h
    
    /**
    
     * This is the Bucket class for the Dynamic_Hashing Project.
    
     *
    
     */
    
    #ifndef _BUCKET_H_
    
    #define _BUCKET_H_
    
    
    #include <string>
    
    #include <fstream>
    
    #include <sstream>
    
    
    #include "Article.h"
    
    #include "Dynamic_Hashing_Exception.h"
    
    
    template<uint size>
    
    class Bucket
    
      {
    
    
      private:
    
        Article *articles[size];
    
        uint currentArticles;
    
    
      public:
    
        Bucket()
    
        {
    
          currentArticles = 0;
    
        }
    
    
        void read(std::fstream & inputStream, ulint pos) ;
    
    
        void addArticle(Article *art) ;
    
    
        Article* getArticle(uint i);
    
    
        void write(std::fstream & stream, ulint pos) ;
    
    
        uint getCurrentArticles()
    
        {
    
          return currentArticles;
    
        }
    
    
        bool isFull()
    
        {
    
          return currentArticles == size;
    
        }
    
    
      };
    
    
    template <uint size>
    
    void Bucket<size>::addArticle(Article *art)
    
    {
    
      if (currentArticles == size)
    
        {
    
          throw Dynamic_Hashing_Exception("Bucket is full.");
    
        }
    
      articles[currentArticles] = art;
    
      ++currentArticles;
    
    
    }
    
    
    template<uint size>
    
    Article* Bucket<size>::getArticle(uint i)
    
    {
    
      if (i >= currentArticles)
    
        {
    
          throw Dynamic_Hashing_Exception("Article index out of bounds.");
    
        }
    
      return articles[i];
    
    }
    
    
    template<uint size>
    
    void Bucket<size>::read(std::fstream & stream, ulint pos)
    
    {
    
    
      stream.seekg(pos);
    
      currentArticles = 0;
    
    
      for (int art = 0; art < size; ++art)
    
        {
    
          articles[art] = new Article(stream);
    
          if (articles[art]->getArticleNumber() != 0)
    
            {
    
              ++currentArticles;
    
            }
    
        }
    
    }
    
    
    template<uint size>
    
    void Bucket<size>::write(std::fstream & stream, ulint pos)
    
    {
    
      if (!stream.is_open())
    
        {
    
          throw Dynamic_Hashing_Exception("Stream is not open.");
    
        }
    
    
      stream.seekp(pos);
    
      if (stream.fail())
    
        {
    
          throw Dynamic_Hashing_Exception("Position seems out of bounds. Stream in fail state.");
    
        }
    
    
    
      Article* nullArticle = new Article(0,"",0);
    
      for (uint art = 0; art < size; ++art)
    
        {
    
          if (art < currentArticles)
    
            {
    
              articles[art]->write(stream);
    
            }
    
          else
    
            {
    
              nullArticle->write(stream);
    
            }
    
        }
    
    }
    
    
    #endif /* _BUCKET_H_ */
    
    
    

  5. anbei meine main.cpp

    #include <iostream>

    #include <string>

    #include "Dynamic_Hashing.h"

    #include "Article.h"

    #include <sstream>

    #define BUCKET_SIZE 2

    #define BIG_PRIM 37956673

    using namespace std;

    class UI

    {

    private:

    Dynamic_Hashing<BUCKET_SIZE, BIG_PRIM > h;

    public:

    UI() : h("HashFile") {}

    char menu(void);

    void newArtikel(void);

    void showArtikel(void);

    void showAll(void);

    void setDynamic_Hashing(void);

    };

    int main (int argc, char * const argv[])

    {

    UI ui;

    cout << endl << "Dynamic_Hashing" << endl;

    //ui.setDynamic_Hashing();

    char input = ui.menu();

    while (input != 'q')

    {

    switch (input)

    {

    case 'D':

    case 'd':

    ui.showAll();

    break;

    case 'A':

    case 'a':

    ui.newArtikel();

    break;

    case 's':

    case 'S':

    ui.showArtikel();

    break;

    case 'Q':

    case 'q':

    return 0;

    default:

    cout << "input incorrect: " << input << endl;

    }

    input = ui.menu();

    }

    return 0;

    }

    char UI::menu(void)

    {

    cout << "choose: [a]dd article - earch for an article - [d]isplay all articles - [q]uit" << endl;

    string input;

    cin >> input;

    return input[0];

    }

    void UI::setDynamic_Hashing(void)

    {

    string name;

    cout << "Hash-File: ";

    cin >> name;

    }

    void UI::newArtikel(void)

    {

    int nr = 0;

    string name;

    string tmp;

    float price = 0;

    cout << "article number: ";

    cin >> tmp;

    nr = atoi(tmp.c_str());

    if (nr == 0)

    {

    cout << "article number must be a integer > 0" << endl;

    return;

    }

    cout << endl << "article description: ";

    cin >> name;

    if (name.length() > 19)

    {

    cout << "description must not be longer than 19 chars" << endl;

    return;

    }

    cout << endl << "article price: ";

    cin >> tmp;

    price = atof(tmp.c_str());

    if (price == 0.0)

    {

    cout << "price must be a float > 0 (delimiting char = '.')" << endl;

    return;

    }

    cout << endl;

    cout << nr;

    try

    {

    h.insert(new Article(nr,name,price));

    cout << "article has been created: (" << nr << ") " << name << " " << price << " euro" << endl;

    }

    catch ( Dynamic_Hashing_Exception ex )

    {

    cout << ex.getMessage();

    Dynamic_Hashing_Exception* cause = ex.getCause();

    while (cause != NULL) {

    cause = cause->getCause();

    cout << cause->getMessage() << endl;

    }

    return;

    }

    }

    void UI::showArtikel(void)

    {

    int nr;

    cout << "article nummber: ";

    cin >> nr;

    try

    {

    Article * a;

    a = h.retrieve(nr);

    if (a != NULL)

    {

    a->display();

    }

    else

    {

    cout << "article with id " << nr << " doesn't exist!" << endl;

    }

    }

    catch (Dynamic_Hashing_Exception ex)

    {

    cout << ex.getMessage();

    }

    cout << endl;

    }

    void UI::showAll(void)

    {

    try

    {

    h.display();

    }

    catch (Dynamic_Hashing_Exception ex)

    {

    cout << ex.getMessage();

    }

    }

  6. Hallo zusammen,

    ich habe ein Problem. Beim kompilieren bekomme ich folgende Fehler

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(15) : error C2061: Syntaxfehler : Bezeichner 'uint'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : error C2992: 'Bucket' : Ungueltige oder fehlende Vorlagen-Parameterliste

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Deklaration von 'Bucket'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(49) : error C2061: Syntaxfehler : Bezeichner 'uint'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(50) : error C2065: 'size' : nichtdeklarierter Bezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(50) : error C2039: 'addArticle' : Ist kein Element von 'Bucket'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Deklaration von 'Bucket'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(50) : error C2061: Syntaxfehler : Bezeichner 'Article'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(61) : error C2061: Syntaxfehler : Bezeichner 'uint'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2501: 'Article' : Fehlende Speicherklasse oder Typbezeichner

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : error C2059: Syntaxfehler : ';'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(62) : fatal error C1903: Weiterverarbeitung nach vorhergehendem Fehler nicht moeglich; Kompilierung wird abgebrochen.

    main.cpp

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(29) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(35) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(47) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<size>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(72) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(89) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(32) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(115) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(32) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(115) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<size,modFac>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(29) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(24) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<2>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\bucket.h(35) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(24) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Bucket<2>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(32) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\dynamic_hashing.h(32) : error C2632: 'long' gefolgt von 'long' ist unzulaessig

    c:\users\akasya\desktop\hashing\fh\algdat\dynamic_hashing\main.cpp(16) : Siehe Verweis auf Instantiierung der kompilierten Klassenvorlage 'Dynamic_Hashing<2,37956673>'

    Fehler beim Ausführen von cl.exe.

    Hashing.exe - 21 Fehler, 0 Warnung(en)

    woran könnte es liegen?

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...