Seite 1 von 1

Eigener Operator ( QBuffer )

Verfasst: 21. März 2008 13:56
von Maxro
Hallo,
ich habe gerade ein Problem und komme irgendwie nicht weiter. Für mein Programm bräuchte ich für QBuffer den Operator " = " , und da es diese nicht von Haus aus gibt dachte ich mir schreibe ich hin mir selber. Folglich habe ich mir eine Abgeleitet Klasse von QBuffer erstellt und noch die Funktion operator= hinzugefügt.

Zur hilfe genommen habe ich mir diese Internetseite:

http://www.uni-koeln.de/rrzk/kurse/unte ... opover.htm

Nun so schaut der Code aus :

Code: Alles auswählen

#include <QBuffer>
#include <QByteArray>

class MyBuffer : public QBuffer
{

public:
  MyBuffer(){};

public:
   QBuffer operator = (QBuffer buf)
	{
	const QByteArray data = buf.data();

	QBuffer newBuf;
	newBuf.setData(data);

	return newBuf;
        }

};
Nun bekomme ich vom copliere allerdings diese Fehlermeldung(en):

Code: Alles auswählen

/usr/include/QtCore/QBuffer: In member function ‘QBuffer MyBuffer::operator=(QBuffer)’:
/usr/include/QtCore/QBuffer:91: error: ‘QBuffer::QBuffer(const QBuffer&)’ is private
myBuffer.h:18: error: within this context
/usr/include/QtCore/QBuffer: In member function ‘MyBuffer& MyBuffer::operator=(const MyBuffer&)’:
/usr/include/QtCore/QBuffer:91: error: ‘QBuffer& QBuffer::operator=(const QBuffer&)’ is private
myBuffer.h:5: error: within this context
main.cpp: In function ‘int main(int, char**)’:
main.cpp:18: note: synthesized method ‘MyBuffer& MyBuffer::operator=(const MyBuffer&)’ first required here 
main.cpp: At global scope:
make: *** [main.o] Fehler 1
Ich werde draus nicht sonderlich schlau , vllt kann mir ja einer weiter helfen.

Danke schonmal im voraus ;)

Verfasst: 21. März 2008 15:05
von upsala
Du verwendest 2x den Copy-Konstruktor um den Copy-Konstruktor nachzubilden?

Verfasst: 22. März 2008 10:52
von SchranZViruS
Probiers einfach mal mit folgendem:

Code: Alles auswählen

QBuffer& operator = (const QBuffer& buf) 
{ 
    setData(buf.data()); 
 
    return *this; 
}
Man sollte bei dem Zuweisungsoperator "=" eine Referenz zu sich selbst zurückgeben, weil man sonst unnötig viel Daten hin und her kopiert, deswegen das "QBuffer& operator..."

Des weiteren ist es immer sinnvoller Klassen als Parameter mit const ... & zu übergeben, das spart weiter Speicher, weil ansonsten jedes mal die ganze Klasse kopiert wird.

Mit den beiden Sachen sieht das ganze gleich viel besser aus und dürfte auch wunederbar compilen...

Vlg