[gelöst] QDataStream Problem

Alles rund um die Programmierung mit Qt
Antworten
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

[gelöst] QDataStream Problem

Beitrag von Tom_Tom »

Hallo, ich bekomme immer folgende Fehlermeldunge:

C2248: "QObject::operator =": Kein Zugriff auf private Member, dessen Deklaration in der QObject-Klasse erfolgte.

Mein Code-Ausschnitt worin der Fehler verursacht wird.


LoginRequest - Header

Code: Alles auswählen



#ifndef LOGINREQUEST_H_
#define LOGINREQUEST_H_

#include <Qt/qobject.h>
#include <QtCore/QDataStream>
class LoginRequest : public QObject
{
	Q_OBJECT
	
	QString user;

public:
	LoginRequest(QObject* parent = 0);
	virtual ~LoginRequest();


	void setUser(QString user);
	QString getUser();

};	
QDataStream& operator<<(QDataStream & dataStream, LoginRequest & loginRequest);
QDataStream& operator>>(QDataStream & dataStream, LoginRequest & loginRequest);
#endif


LoginRequest - Source

Code: Alles auswählen


#include "LoginRequest.h"


LoginRequest::LoginRequest(QObject* parent) : QObject(parent)
{
	
}


LoginRequest::~LoginRequest()
{
}

void LoginRequest::setUser(QString user) {
	//this->user = user;
}

QString LoginRequest::getUser() {
	//return this->user;
	return 0;
}



QDataStream& operator<<(QDataStream & dataStream, LoginRequest & loginRequest)
{
	QString user = loginRequest.getUser();
	dataStream << user;
	
	return dataStream;
}

QDataStream& operator>>(QDataStream & dataStream, LoginRequest & loginRequest)
{
	QString user;
	dataStream >> user;
	loginRequest.setUser(user);
	return dataStream;
}

RequestPackage - Header

Code: Alles auswählen


#ifndef REQUESTPACKAGE_H_
#define REQUESTPACKAGE_H_

#include <Qt/qobject.h>
#include "LoginRequest.h"
class RequestPackage : public QObject
{
	Q_OBJECT

	int Type;
	LoginRequest loginRequest;


public:
	enum TYPE {LOGIN, DBQUERY};

	RequestPackage(QObject* parent = 0);
	RequestPackage(TYPE type, QObject* parent = 0);
	virtual ~RequestPackage();

	//return the Request-Type (show enum-List)
	int getType();
	
	//set the Request-Type (show enum-List)
	void setType(int type);

	LoginRequest getLoginRequest();
	void setLoginRequest(LoginRequest loginRequest);


	friend QDataStream &operator<<(QDataStream & dataStream, RequestPackage & requestPackage);
	friend QDataStream &operator>>(QDataStream & dataStream, RequestPackage & requestPackage);

};

#endif

RequestPackage - Source

Code: Alles auswählen


#include "RequestPackage.h"
#include "LoginRequest.h"


RequestPackage::RequestPackage(QObject* parent /*= 0*/ ) : QObject(parent)
{
}

RequestPackage::RequestPackage(TYPE type, QObject* parent /*= 0*/ ) : QObject(parent)
{
	//Type can be a value of enum-List
	this->Type = type;
	this->loginRequest = new LoginRequest();
}


RequestPackage::~RequestPackage()
{
}

//return the Request-Type (show enum-List)
int RequestPackage::getType() {
	return this->Type;
}

//set the Request-Type (show enum-List)
void RequestPackage::setType(int type) {
	this->Type = type;
}

LoginRequest RequestPackage::getLoginRequest() {
	return this->loginRequest;
}
void RequestPackage::setLoginRequest(LoginRequest loginRequest) {
	this->loginRequest = loginRequest;
}

//WRITE
QDataStream& operator<<(QDataStream & dataStream, RequestPackage & requestPackage)
{
	dataStream << requestPackage.getType();

	switch(requestPackage.getType())
	{
		//RequestPackage::LOGIN
	case RequestPackage::LOGIN:
		dataStream << requestPackage.getLoginRequest();
		break;

	}


	return dataStream;
}

//READ
QDataStream& operator>>(QDataStream & dataStream, RequestPackage & requestPackage)
{
	int wert;
	dataStream >> wert;
	requestPackage.setType(wert);

	switch(requestPackage.getType())
	{
		//RequestPackage::LOGIN
	case RequestPackage::LOGIN:
		LoginRequest loginRequest;
		dataStream >> loginRequest;
		requestPackage.setLoginRequest(loginRequest);
		break;

	}


	return dataStream;
}

Wäre schön, wenn mir jemand helfen könnte, mein Problem zu lösen.
Zuletzt geändert von Tom_Tom am 8. Oktober 2008 18:00, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Wo genau der Fehler auftritt wäre ja auch noch nett...
Man kann ein QObject - Objekt nicht kopieren.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag von Tom_Tom »

Habe den Fehler jetzt gefunden. Es lag nicht an DataStream.

Hier nochmal ein einfacheres Codebeispiel.

KlasseA.h

Code: Alles auswählen

#ifndef KLASSEA_H_
#define KLASSEA_H_

#include <Qt/qobject.h>

class KlasseA : public QObject
{
	Q_OBJECT
public:
	KlasseA(QObject* parent = 0);
	virtual ~KlasseA();
};
#endif
KlasseA.cpp

Code: Alles auswählen

#include "KlasseA.h"

KlasseA::KlasseA( QObject* parent /*= 0*/ ) : QObject(parent)
{
}

KlasseA::~KlasseA()
{
}
KlasseB.h

Code: Alles auswählen

#ifndef KLASSEB_H_
#define KLASSEB_H_

#include <Qt/qobject.h>
#include "KlasseA.h"

class KlasseB : public QObject
{
	Q_OBJECT

	KlasseA wert;

public:
	KlasseB(QObject* parent = 0);
	virtual ~KlasseB();

	void setWert(KlasseA wert);

};
#endif
KlasseB.cpp

Code: Alles auswählen

#include "KlasseB.h"

KlasseB::KlasseB( QObject* parent /*= 0*/ ) : QObject(parent)
{
}

KlasseB::~KlasseB()
{
}

void KlasseB::setWert(KlasseA wert) {
	this->wert = wert; //hier tritt der Fehler auf.
}
Warum funktioniert das so nicht? Was mache ich falsch oder was muss ich tun, damit es klappt?

Wäre nett, wenn mir da nochmal jemand helfen könnte.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich habe schon erklärt warum es nicht funktioniert - du kannst eine QObject-basierte Klasse nicht kopieren. Dies tust Du an der Stelle dort aber mindestens zweimal.
Lösung ist entweder nicht von QObject ableiten oder einen Pointer benutzen.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Tom_Tom
Beiträge: 54
Registriert: 2. August 2008 18:39

Beitrag von Tom_Tom »

Ok alles klar.

Danke erstmal.

Ich probier es mal.
Antworten