Problem mit Rückgabetyp (Klasse)

thekiller

Viceinator
Hallo Leute,

ich hab ein Problem beim Rückgeben einer Klasse aus einer Methode heraus.

Also es gibt eine Klasse namens CosiByteArray. Wie der Name schon sagt verwaltet diese Klasse einfach ein Array ähnlich wie QByteArray in Qt.

Ich habe die Klasse soweit gestestet und sie scheint auch ohne Probleme zu funktionieren.

CosiByteArray.h
C++:
#ifndef CosiByteArray_H
#define CosiByteArray_H

// Standard C/C++ - Headers
#include <mem.h>

// CosiFramework - Headers
#include "CosiSimpleDataTypeDefinitions.h"
#include "CosiExcErrMsg.h"

class CosiByteArray {
	private:
		CosiByte	*m_Data;
		CosiUint64	m_Size;

		void	InitClass();
		void	CleanUpClass();

	public:
		CosiByteArray();
		~CosiByteArray();

		void	SetData(CosiByte *_Data, CosiUint64 _SizeInbyte);
		void	SetData(CosiByteArray &_Instance);
		void	AppendData(CosiByte *_Data, CosiUint64 _SizeInbyte);
		void	DeleteData();

		CosiByte*	GetData();
		CosiUint64	GetSize();
};

#endif // CosiByteArray_H

Beim Erstellen einer Instanz von CosiByteArray werden m_Data und m_Size im Konstruktor natürlich auf 0 gesetzt.

CosiByteArray möchte ich nun in einer anderen Klasse von mir verwenden.

CosiFile:
C++:
#ifndef COSIFILE_H
#define COSIFILE_H

// Standard C/C++ - Headers
#include <stdio.h>

// CosiFramework - Headers
#include "CosiSimpleDataTypeDefinitions.h"
#include "CosiExcErrMsg.h"
#include "CosiByteArray.h"

class CosiFile {
	private:
		FILE		*m_FileHandle;
		CosiUint64	m_FileSize;
		CosiUint64	m_FilePtrPos;
		bool		m_FlagOpen;

		void	InitClass();
		void	CleanUpClass();

	public:
		CosiFile();
		~CosiFile();

		void	OpenFile(const char *_FileName);
		void	CloseFile();

		void			WriteData(CosiByte *_Data, CosiUint64 _Size);
		CosiByteArray	ReadData(CosiUint64 _Size);

		CosiUint64	GetFileSize();

		void	SetPosition(CosiUint64 _Position);
		CosiUint64	GetPosition();
};

#endif // COSIFILE_H

Mein Problem tritt nun in der Methode
C++:
CosiByteArray	ReadData(CosiUint64 _Size);
auf.

Die Methode sieht folgendermaßen aus:
C++:
CosiByteArray	CosiFile::ReadData(CosiUint64 _Size) {
    CosiByteArray DataArray;

    /*
        Hier passieren noch andere Operationen
    */

    return DataArray;
}

Beim Debuggen zeigt mit der QtCreator folgende Daten (siehe Screenshot)

Warum gibt mir der Debugger zwei mal DataArray an? Und warum sind m_Data und m_Size nicht 0?

Das Problem tritt übrigends nicht auf, wenn ich mit
C++:
CosiByteArray	ReadData(CosiUint64 _Size);
z.B. void zurückgebe. Dann Gibt der Debugger nur einmal DataArray an und die Member sind auch mit 0 initialisiert.

An der Stelle scheinen meine C++ Kenntnisse wohl nicht mehr zu reichen.
Muss man bei CosiByteArray noch einen Konstruktor überladen oder wodran kann das liegen****

MfG Manuel

EDIT.: Ich hab nochmal ein Screenshot angehängt wo es ohne Probleme funktioniert.
 

Anhänge

  • Screenie.JPG
    Screenie.JPG
    55,5 KB · Aufrufe: 17
  • Screenie2.JPG
    Screenie2.JPG
    44,6 KB · Aufrufe: 7
Zuletzt bearbeitet von einem Moderator:
Hab ich eingebaut. Problem besteht leider weiterhin :(

C++:
CosiByteArray::CosiByteArray(const CosiByteArray &_Instance) {
	this->InitClass();
	this->SetData(_Instance.m_Data, _Instance.m_Size);
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück