Eigene Buffer Klasse funtzt net



  • Hi,

    ich hab mir ne buffer klasse geschrieben für ein Chat Programm, aber sie funtzt net.

    der code:

    buffer.h:

    #ifndef BUFFER
    #define BUFFER
    
    #define BUFFER_FULL -1
    #define BUFFER_EMPTY °
    
    #include <string>
    
    using namespace std;
    
    class buffer
    {
      public:
      buffer();
      ~buffer();
    
      void write(string);
      string read();
      int GetLength() const;
    
      private:
      int getlatestfree() const;
      void delall();
      void dellast();
    
      string Buf[100];
      int Length;
    };
    
    #endif
    

    buffer.cpp:

    #include "buffer.h"
    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    buffer::buffer()
    {
      delall();
    }
    
    buffer::~buffer()
    {}
    
    void buffer::write(string text)
    {
      if(getlatestfree() != BUFFER_FULL)
      {
        Buf[getlatestfree()] = text;
        Length += 1;
      }
      else
      {
        std::cout << "BUFFER-FEHLER: Der Buffer ist foll! Versuchen sie es spaeter erneut!\n";
      }
    }
    
    string buffer::read()
    {
      string buf;
      if(Buf[99] != "")
      {
        buf = Buf[99];
        dellast();
        return buf;
      }
      else
      {
        return "°";
      }
    }
    
    void buffer::dellast()
    {
      for(int i = 99; i > 99 - Length; i--)
      {
        if(i != 0)
        {
          Buf[i] = Buf[i-1];
        }
        else
        {
          Buf[0] = "";
        }
      }
      Length -= 1;
    }
    
    int buffer::getlatestfree() const
    {
      int i;
      for(i = 99; i >= 0; i--)
      {
        if(Buf[i] == "")
        {
          return i;
        }
      }
      return BUFFER_FULL;
    }
    
    void buffer::delall()
    {
      for(int i = 0; i < 100; i++)
      {
        Buf[i] = "";
      }
      Length = 0;
    }
    
    int buffer::GetLength() const
    {
      return Length;
    }
    

    Das Problem: ab und zu ist der buffer leer wo es nicht sein kann/sollte und wenn was drin ist, dann is auchnoch alles von der letzten nachricht drin.

    z.B:

    Nachricht eins:          Hallo wie geht es dir?
    Nachricht zwei(eingabe): Gut!
    Nachricht zwei(ausgabe): Gut!o wie geht es dir?
    

    😕 😕 😕 Warum 😕 😕 😕



  • Geheimtipp: Verwende einen Debugger



  • hab ich, aber ich finde das prob net



  • Ich denke mal es liegt daran, dass du dein Buffer nach Ausgabe deiner Message, nicht leerst 😉



  • eigentlich schon, wenn read() aufgerufen wird wird ja auch die funktion dellast() aufgerufen die den letzten mit dem vorletzten string überschreibt!



  • ich hab das prob gelößt: es lag nicht am buffer sondern an ner variablen im haupt prog


Anmelden zum Antworten