A
Hallo
1. Diese Zeile
DynArray <int> Instanz();
bringt den Compiler durcheinander, denn er glaubt das wäre die Deklaration einer Funktion. Um eine Instanz der Klasse zu
dekalarieren, must du die Klammern weglassen :
DynArray <int> Instanz;
2. Du kommst irgendwo mit deiner Speicherarbeit durcheinander. Hab jetzt keine Zeit da genau durchzuschauen. Aber ich frag mich eh warum du so etwas neu schreibst, wo es doch wenigstens DynamicArray schon gibt. Wenn es dir nur um das automatische Vergrößern geht, dann schreib dir eben eine einfache Insert-Methode :
template <typename Type>
void DynInsert(DynamicArray<Type>& array, int pos, const Type& value)
{
if (array.Length <= pos)
array.Length = pos +1;
array[pos] = value;
}
...
DynamicArray<int> Instanz;
DynInsert(Instanz, 10, 2);
ShowMessage("Length : " + IntToStr(Instanz.Length) + ", Item : " + IntToStr(Instanz[10]));
Damit sparst du dir viel Ärger.
3. Du hast deine Klasse zwar als Template angelegt, aber trotzdem unnötigerweise die verwendbaren Typen einfgeschränkt.
str.array[0]=0;
Diese Anweisung wird nur bei Typen funktionieren, die expliziet oder impliziert durch einen Integer erstellt werden können. Um das weiter zu verallgemeinern, must du schreiben :
str.array[0]=T();
Damit funktionkiert die Anweisung mit allen Typen die einen Standardkonstruktor anbieten (und diese Einschränkung hast du ja sowieso durch die new-Aufrufe).
bis bald
akari