Hansels schrieb:
ich dachte zumindest arrays mit feldgröße müssen in der header definiert werden, wenn man sie in der klasse global gebrauchen will.
Du definierst nie etwas im Header (außer inline/template). Wie soll das gehen? Wenn du den Header 2 Mal einbindest, hast du 2 Mal die Definition im Programm. -> ODR verletzt.
Was ist gegen globale Variablen auszusetzen?
Wird das nicht in deinem Lehrbuch erklärt? Sie sind sowohl eine große Quelle von Fehlern, auch sind diese Fehler sehr schwer zu debuggen. Hier sind ein paar mehr Details. Im Umkehrschluss gilt, dass man den Gültigkeitsbereich von Variablen stets so klein wie möglich halten sollte. Also
int endergebnis = 0;
for (int i = 0; i < 10; ++i)
{
int zwischenergebnis = komplizierte_rechnung1(i);
endergebnis = komplizierte_rechnung2(zwischenergebnis, i);
}
statt
int endergebnis = 0;
int zwischenergebnis;
for (int i = 0; i < 10; ++i)
{
zwischenergebnis = komplizierte_rechnung1(i);
endergebnis = komplizierte_rechnung2(zwischenergebnis, i);
}
oder gar
int endergebnis = 0;
int zwischenergebnis;
int i;
for (i = 0; i < 10; ++i)
{
zwischenergebnis = komplizierte_rechnung1(i);
endergebnis = komplizierte_rechnung2(zwischenergebnis, i);
}
Oftmals sogar:
Daten daten;
{
ifstream file("dateiname")
file >> daten;
}
statt
Daten daten;
ifstream file("dateiname")
file >> daten;
Hansels schrieb:
Ich bau mir sozusagen eine Heatmap selbst. Neben den Zeicheneigenschaften hat dann ein Rechteck unterschiedliche Zusatzeingeschaften.
Mittels einer selbstgemachten Heatmapklasse greife ich auf die Rechteckklasse, aus der ich dann (feldabhängig) in einem mehrdimensionalen Array eine Anzahl an Rechteckobjekten anlegen will, die unterschiedliche startkoordinaten haben und andere attribute
Ich sehe hier gar keinen Zusammenhang zu deinem Versuch. Hier kommt sogar noch ein weiteres Problem globaler Variablen hinzu, dass gar nicht erwähnt wurde, weil die Benutzung einer globalen Variable in dem Fall gar keinen Sinn hat: Du könntest nur ein einziges Objekt haben! Das ist doch sicher keine Absicht?
Warum nicht so?
class Rectangle { /* ... */ };
class Heatmap
{
Rectangle rectangles[3][2];
};
oder
class Rectangle { /* ... */ };
class Heatmap
{
std::array<std::array<Rectangle, 2>, 3> rectangles;
};
oder
class Rectangle { /* ... */ };
class Heatmap
{
dynamische_2D_array_klasse_die_man_sich_schnell_und_leicht_selber_schreiben_kann<Rectangle> rectangles;
};