[SOLVED] QDataStream nicht kopierbar, aber ich will ihn ....

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
PhilippM
Beiträge: 41
Registriert: 11. Dezember 2005 14:02
Wohnort: Darmstadt
Kontaktdaten:

[SOLVED] QDataStream nicht kopierbar, aber ich will ihn ....

Beitrag von PhilippM »

Servus,

sorry für den kryptischen Titel. Problem ist, das der Kopierkonstruktor von QDataStream privat ist, also ein QDataStream (verständlicherweise!) nicht kopierbar ist. Nun will ich ihn auch nicht kopieren, ich will ihn erzeugen und zurückgeben...

Aber mal mit Code, dann wirds verständlicher. Ich habe ein Klasse die mir den zugriff auf ein UDP-Device kapselt und aus selbigem Datenpakete rausprokelt auf die ich mit einem QDataStream zugreifen will.

Code: Alles auswählen

class DataStreamOverUDP  {
 public:
    bool readFromSocket();           // hier wird das socketdevice auf pakets abgefragt und selbige eingelesen
    QDataStream InStream();        // hier möchte ich einen datastream auf den eingelesenen buffer ausgeben
    void configureInput(const Config&); // hier wird das binden auf port und adresse usw gemacht
  private:
    QHostAddress m_read_hostaddress;
    int m_read_port;
    QUdpSocket* m_read_socketdevice;
    QByteArray m_inBuffer;
};

bool DataStreamOverUDP::readFromSocket()
{ 
    //socketdevice auf wartende datagrams fragen, buffer resizen, datagrams in den buffer einlesen
}

QDataStream DataStreamOverUDP::InStream()
{
    return QDataStream(&m_inBuffer, QIODevice::ReadOnly);
}
Und in dieser letzten Zeile ist das Problem: Ich möchte den Stream haben, damit ich ihn außerhalb meiner Klasse auseinanderprokeln kann.
Also sowas wie

Code: Alles auswählen

DataStreamOverUDP myUdpConnection();
// notwendige initialisierungen
myUdpConnection.readFromSocket();
QDataStream myInputStream = myUdpConnection.inStream();
inStream >> blablablabla;
Das wird mir verweigert mit dem Hinweis, dass
‘QDataStream::QDataStream(const QDataStream&)’ is private
Aber ich will doch garnix kopieren, sondern das Objekt haben!

EDIT: Warum gibt's hier keine cpp-Code-Tags ?? Das ist ja ne Qual ohne Syntaxhervorhebung!
Zuletzt geändert von PhilippM am 22. Januar 2009 18:28, insgesamt 1-mal geändert.
www.vas-project.org
The Virtual Avionics Suite
for MSFS and X-Plane
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Natürlich passiert hier ne Copy:

Code: Alles auswählen

QDataStream myInputStream = myUdpConnection.inStream(); 
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PhilippM
Beiträge: 41
Registriert: 11. Dezember 2005 14:02
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von PhilippM »

Christian81 hat geschrieben:Natürlich passiert hier ne Copy:

Code: Alles auswählen

QDataStream myInputStream = myUdpConnection.inStream(); 
okay, aber diese Zeile Code steht nicht in meinem Code, die hab ich nur fürs Forum eingefügt. Die Kompilierung scheitert bereits beim kompilieren der Klasse.

Entschuldigung, ich formuliere meine Frage anders:
Der Compiler hält mich hier also davon ab, das zu tun, weil es eh keinen Sinn machen würde, wenn ich die Funktion so verwenden würde wie im Zitat. Okay, das ist nett vom Compiler.

Also was hab ich für Möglichkeiten? Den Stream als Membervariable erzeugen und einen pointer darauf zurückgeben? Das widerstrebt mir irgendwie.
www.vas-project.org
The Virtual Avionics Suite
for MSFS and X-Plane
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Es gibt auch noch Referenzen - C++ Basics
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
PhilippM
Beiträge: 41
Registriert: 11. Dezember 2005 14:02
Wohnort: Darmstadt
Kontaktdaten:

Beitrag von PhilippM »

[SOLVED]

Klaro. Mit QDataStream& geht's...
www.vas-project.org
The Virtual Avionics Suite
for MSFS and X-Plane
Antworten