auch ein operator problem



  • buffer ist ein zeiger auf ein TxlAudioRingBuffer?
    dann musst du den zuerst dereferenzieren:

    strcpy((*buffer)[0], edit0->text.c_str());
    


  • hab den fehler gesehen. hab BufferAnzahl gegen "no" getauscht.

    aber warum das mit dem strcpy net funkt, weiß ich noch immer net.

    hab ueberigens es mit dem operator++ probiert.

    inline char* operator++();
    
    inline char* TxlAudioRingBuffer::operator++()
    {
       if(BufferNo == BufferAnzahl) BufferNo = 0;
       else BufferNo += 1;
       return currentBuffer = Buffer + (BufferNo * BufferSize);
    }
    

    auch wieder das prob, das er sacht, das er da ein TxlAudioRingBuffer object zurueckbekommt und keinen char*

    Meep Meep



  • hallo

    koennte mir vielleicht jemand ein kleines beispiel posten, wie ich in einer klasse nen operator, z.b. operator[], basteln kann, der mir dann ein char* zurueckliefert. bei meiner klasse sagt er immer das ein TxlAudioRingBuffer-objekt geliefert wird.

    irgendwer muß das doch schon mal gemacht haben.
    oder verschiebt meinen thread ansonsten nach rund-um oder sonst wohin, wo das vielleicht jemand wissen koennte.

    Meep Meep



  • ein einfaches kompilierbares beispiel:

    #include <iostream>
    using namespace std;
    
    class example {
    	char buffer[8][81];
    
    public:
    	char *operator[] (unsigned i) {
    		return buffer[i];
    	}
    };
    
    int main () {
    	example x;
    	cin.getline(x[0],80);
    	cin.getline(x[1],80);
    
    	cout << x[0] << '\n' << x[1] << '\n';
    
        //und dynamisch:
        example *y = new example;
        cin.getline((*y)[0],80);
        cin.getline((*y)[0],80);
    
        cout << (*y)[0] << '\n' << (*y)[1] << '\n';
    }
    


  • hallo davie

    erst mal danke fuer dein beispiel, aber des funkt net.

    bei

    public: 
        char *operator[] (unsigned i) { 
            return buffer[i]; //(1) 
        } 
    };
    

    sagt der compiler bei (1) konvertierung von int nach char* nicht moeglich.
    wenn ich dann "return (char*)buffer[i];" schreibe, dann frisst er es. leider wirft er mir dann beim testen ne exception (zugriffsverletzung bei ... )

    scheint irgendwie nicht zu funktionieren.

    Meep Meep



  • Hast du dich beim abtippen geirrt?
    Folgendes Beispiel ist deinem ursprünglichen Code schon recht ähnlich

    #include <iostream>
    using namespace std;
    
    class example { 
        char buffer[80*8]; 
    
    public: 
        char *operator[] (unsigned i) { 
    	 	return buffer+80*i;
        } 
    }; 
    
    int main () {
    	example e;
    
    	cin.getline(e[0],80);
    	cin.getline(e[1],80);
    	cout << e[0] << '\n' << e[1] << '\n';
    
    }
    

    sag bloß, das funktioniert auch nicht!

    und übrigens: was kam denn für eine fehlermeldung bei buffer->operator[](i) bei deinem vorigen beispiel?



  • oki doki, fehler gefunden. Muß " return &buffer[i]; " heissen.

    mit den dynamischen buffer funkt das nun auch. und was am bloedesten ist, das auch meine tests von gestern funktionieren.

    irgendwie versteh ich das nun ueberhaupt nicht mehr.

    nun ja, mal gucken wie lange das anhalten wird.
    erstmals dank dir fuer die hilfe

    Meep Meep



  • nachtrag

    verschiedene fehler bekam ich da. meistens waren es exceptions wegen speicherzugriff. 1-2 mal kam das er von TxlAudioRingBuffer* nach char* nicht konvertieren kann.

    bin gespannt ob das dann auch mit den anderen operatoren laufen wird. ansonsten melde ich mich dann nochmal, falls ich die kiste nicht zum fenster rausgeworfen habe ;o)

    Meep Meep



  • hallo

    also, solange ich TxlAudioRingBuffer nicht als dyn. variable anlege funkt es wunderpraechtig. wenn ich aber ne dyn. anlege dann mag er nicht mehr.
    da gibt er mir z.b. bei "strcpy(buffer[0],&einString);" nen fehler aus:
    TxlAudioRingBuffer kann nicht nach char* konvertiert werden.

    was muß ich da nun aendern, damit das funktioniert ?

    Meep Meep



  • wenn du einen zeiger auf den txlWieauchimmer hast, dann musst du den auch vorher referenzieren:

    (*buffer)[42]
    

    aber das hab ich schon 2-3mal geschrieben 🙄



  • da wirft er mir aber immer eine exception

    Meep Meep



  • //irgendwo:
     TxlAudioRingBuffer *buffer = new TxlAudioRingBuffer;
    //dann:
    strcpy((*buffer)[0], blub);
    //am ende:
    delete buffer
    

    wenn was nicht klappt ist etwas detailiertere information unbedingt notwendig.



  • bei

    TxlAudioRingBuffer buffer(5,10);
    ...
    strcpy(buffer[0],blub); (OK)
    

    funktioniert es.
    bei

    TxlAudioRingBuffer *buffer = new TxlAudioRingBuffer(5,10);
    ...
    strcpy((*buffer)[0],blub); (Exception)
    delete buffer;
    

    funktionierts net.
    die klaase ansich sollte schon funktionieren, und ich glaub auch nicht das ich bei den wenigen zeilen fuer operator[] was falsch habe. mit operator++ funktioniert es wie auch bei den anderen operatoren. nur bei [] will er nicht.

    Meep Meep


Anmelden zum Antworten