ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
378
378
EMPFEHLEN
-
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
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#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:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
#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
auf.Code cpp:1
CosiByteArray ReadData(CosiUint64 _Size);
Die Methode sieht folgendermaßen aus:
Code cpp:1 2 3 4 5 6 7 8 9
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
z.B. void zurückgebe. Dann Gibt der Debugger nur einmal DataArray an und die Member sind auch mit 0 initialisiert.Code cpp:1
CosiByteArray ReadData(CosiUint64 _Size);
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.Geändert von thekiller (03.02.12 um 11:05 Uhr)
OS: Win 7 Ultimate x64
CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
RAM: 4 x 8GB-DDR3 1333MHz
Board: Asus P8Z68-V/Gen3
GFX: Nvidia GTX580 (Palit)
Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
blog.unlimitedengine.de
design-projects.de
-
Hallo Manuel,
du solltest CosiByteArray noch einen Kopierkonstruktor spendieren.
Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Hab ich eingebaut. Problem besteht leider weiterhin

Code cpp:1 2 3 4
CosiByteArray::CosiByteArray(const CosiByteArray &_Instance) { this->InitClass(); this->SetData(_Instance.m_Data, _Instance.m_Size); }
OS: Win 7 Ultimate x64
CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
RAM: 4 x 8GB-DDR3 1333MHz
Board: Asus P8Z68-V/Gen3
GFX: Nvidia GTX580 (Palit)
Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
blog.unlimitedengine.de
design-projects.de
-
03.02.12 12:52 #4
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
Hi.
Wenn du den Kopierkostruktor überschreibst, solltest du in der Regel alle der "big three" überschreiben.
http://en.wikipedia.org/wiki/Rule_of...programming%29
GrußIf at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ah ok Assignment-Operator und Copy-Constructor waren die Lösung meines Problems.
Vielen Dank!
MfG ManuelOS: Win 7 Ultimate x64
CPU: Intel Core i7 2600K (3,4GHz - 3,8 GHz)
RAM: 4 x 8GB-DDR3 1333MHz
Board: Asus P8Z68-V/Gen3
GFX: Nvidia GTX580 (Palit)
Cinema 4D R12, Photoshop CS5, Visual Studio 2010, Qt SDK, Notepad++
blog.unlimitedengine.de
design-projects.de
Ähnliche Themen
-
Problem mit eigener Klasse und Objekten dieser Klasse
Von Eroli im Forum C/C++Antworten: 15Letzter Beitrag: 10.06.10, 17:48 -
c++ Struct mit constructors als rückgabetyp einer funktion
Von cycovery im Forum C/C++Antworten: 7Letzter Beitrag: 26.05.08, 23:13 -
C: string als Rückgabetyp einer Funktion
Von paddymann im Forum C/C++Antworten: 4Letzter Beitrag: 20.12.07, 17:35 -
dyn. Rückgabetyp bei einer Methode
Von chris_sit im Forum JavaAntworten: 2Letzter Beitrag: 24.10.06, 12:35 -
Struct als Rückgabetyp von MFC DLL
Von MichiStroi im Forum C/C++Antworten: 3Letzter Beitrag: 21.09.05, 13:58





Zitieren
Login






