Probleme mit CArray in Structs
-
Ich verwende schon seit längerem in meinen Klassen Structs um besser den Überblick zu behalten und um sie in CArray zu verwenden.
Bis jetzt habe ich nur einfache auf Dialogfeld basierene Programme geschrieben.
Doch seit dem ich jetzt an einem SDI Programm arbeite, habe ich Probleme mit einem Struct.
Sobald ich das Struct einer Klasse, die in einem Dialogfeldbasierendem Programm einwandfrei funktioniert hat im SDI Programm verwende, bekomme ich folgende Fehlermeldung:
Fehler 4 error C2248: "CObject::CObject": Kein Zugriff auf private Member, dessen Deklaration in der CObject-Klasse erfolgte. c:\program files (x86)\microsoft visual studio 8\vc\atlmfc\include\afxcoll.h 593Das Stuct ist z.B.: folgendermaßen aufgebaut:
typedef struct ST_DEMOSTRUCT { CString strVariable1; CStringArray straVariable2; int iVariable3; }tag_debostruct;
Und verwendet wird dass Stuct in einer CArray Klasse:
public: CArray<ST_DEMOSTRUCT,ST_DEMOSTRUCT> m_staArray;
Gibt es einen Weg diese Structs auch im SDI-Programm zu verwenden und wie muss ich dass tun?
-
Soweit ich weiß hat CStringArray keinen Kopier-Operator...
Also bei Dir einen Kope-Operator für Deine struct, der CStringArray::Insert verwendet...
Oder einfacher: Nimm std::vector!
-
Das Merkwürdige ist ja, dass das selbe Struct in der selben Klasse fehlerfrei funktionieren, wenn es in einem Dialogfeldbasierendem Programm eingesetzt wird.
Bis jetzt habe ich die Einträge in CStringArray nicht über Kopieren behandelt, sondern habe sie Eintrag für Eintrag befüllt, da es zum Programmablauf gepasst hat.
(SetSize() + direkt in das Feld schreiben.)Danke für den Hinweis zum Vector.
Ich werde mich dahingehend einlesen.
-
Das Ganze hat sich erledigt.
Ich habe das jetzt anders gelöst.
(Alle Variablen anstatt in eiem Struct, in einer eigenen Klasse verkapselt.)
-
Bernd schrieb:
Das
(Alle Variablen anstatt in eiem Struct, in einer eigenen Klasse verkapselt.)Und was ist da anders?
struct { int member; };
class { public: int member; };
sind vollkommen identisch!
-
Entschuldigung für die späte Antwort.
Der Grund warum es bei der Klasse funktioniert hat und beim Struct nicht war, dass ich in im Struct beim operator = das Array nicht über den Kopier-Befehl kopiert habe sondern = verwendet habe.
Nachdem ich im Struct auch den Kopier-Befehl eingesetzt habe, hat alles funktioniert wie es soll.