const array[y][x] in Klasse benötigt - wie gehts?
-
Ok. Ich muss dazu sagen, dass ich auf das "static" mehr oder weniger durch Probieren gekommen bin (hab noch nicht wirklich ne Ahnung wozu das überhaupt da ist).
Wie und wo kann ich denn so ein Array anlegen? Mir ist halt wichtig, dass es "const" ist.
EDIT:
da hat sich doch tatsächlich noch ne Antwort dazwischen geschoben
Diese Variante habe ich auch schon probiert (allerdings alles im Header). Ging auch nicht.
-
protonmw schrieb:
Diese Variante habe ich auch schon probiert (allerdings alles im Header). Ging auch nicht.
"geht nicht" ist keine Fehlerbeschreibung. Die Variante "geht" durchaus. Wenn mans richtig macht.
-
Warum geht die Variante von "krümelkacker" ?

Alles im Header ging nicht! habs genau so gemacht wie dein Besipiel, nur eben alles im header! Sehr komisch

OK! Besten Dank!! es funzt...
-
pumuckl schrieb:
Wenn mans richtig macht.
Wie würde es denn korrekt aussehen, wenn alles im Header stehen soll?
-
protonmw schrieb:
Wie würde es denn korrekt aussehen, wenn alles im Header stehen soll?
Das ist ein Widerspruch. "korrekt" und "alles im Header" schließen sich aus. Du bindest anscheinend den Header in mehreren cpp-Dateien ein und versuchst die Ergebnisse dem Linker vorzusetzen. Der Linker meckert dann, dass das Array mehrfach definiert wurde. Es ist also eine Verletzung der "Eine-Definition-Regel". Diese "Regel" -- eigentlich ein Haufen von Regeln und Aushahmen -- ist auch etwas komplizierter als man denken würde. Ich empfehle Dir, diesbezgl Nachforschungen anzustellen. Wenn ein Buch über C++ etwas taugt, dann steht da auch etwas zur "Eine-Definition-Regel" drin.
-
protonmw schrieb:
pumuckl schrieb:
Wenn mans richtig macht.
Wie würde es denn korrekt aussehen, wenn alles im Header stehen soll?
Garnicht. Du kannst im Header keine Definitionen einbauen wenn du den Header in verschiedenen Übersetzungseinheiten benutzt. Du hättest dann nämlich in mehreren ÜEs die selbe Definition und der Linker würde was von "multiple definition of..." erzählen. Das wäre dann vermutlich dein "geht nicht".
-
pumuckl schrieb:
"multiple definition of..."
Ja ich glaube das wars...
Also ich habs jetzt so gemacht:
krümelkacker schrieb:
// header ... class foo { static const int xxx[5]; // <-- Deklaration }; // cpp ... const int foo::xxx[5] = { 1,2,3,4,5 }; // <-- DefinitionDanke nochmal!
-
pumuckl schrieb:
Du kannst im Header keine Definitionen einbauen wenn du den Header in verschiedenen Übersetzungseinheiten benutzt. Du hättest dann nämlich in mehreren ÜEs die selbe Definition und der Linker würde was von "multiple definition of..." erzählen. Das wäre dann vermutlich dein "geht nicht".
Um meinen Namen alle Ehre zu machen, werde ich jetzt mal pingelig. Die "one-definition-rule" (ODR) erlaubt mehrere äquivalente DeFINItionen von
- Klassen
- Klassen-Templates
- Elementfunktionen von Klassen-Templates
- Statische Elemente von Klassen-Templates
- Inline-Funktionen
- Funktions-Templates
falls diese in verschiedenen ÜEs stehen, also höchstens eine Def pro ÜE. Was nicht erlaubt wird sind Mehrfachdefinitionen von "normalen" Funktionen, Referenzen und Objekten (inklusive Arrays). Es gibt auch keinen guten Grund dafür, das anders handzuhaben.
-
Na Toll!
Also der Compiler sagt alles ok! Zur Laufzeit ist aber nur Grütze im Array drin.
Woran kann das denn liegen?
-
protonmw schrieb:
Woran kann das denn liegen?
Du hast einen Fehler in deinem Programm.
-
Na das dachte ich mir auch schon! :p
Hier die Definition (global):unsigned short m_awPhi1[13][9]= { // 0 60 120 180 240 300 360 420 480 {579,566,553,539,526,513,499,486,473}, //0 {576,560,551,539,526,513,501,492,476}, //60 {574,562,550,538,526,514,502,490,478}, //120 {572,560,549,538,526,514,503,492,480}, //180 {570,559,548,537,526,515,504,493,482}, //240 {568,557,547,537,526,515,505,495,484}, //300 {566,556,546,536,526,516,506,496,486}, //360 {564,555,545,535,526,517,507,497,488}, //420 {563,554,545,534,526,518,507,498,489}, //480 {562,553,544,534,526,518,508,499,490}, //540 {560,552,543,534,526,518,509,500,492}, //600 {559,551,543,534,526,518,509,501,493}, //660 {558,550,542,534,526,518,510,502,494} //720 };
-
Die Definition an sich stimmt, also liegt der Fehler woanders. Was genau ist denn "Grütze"?
-
Es steht in jeder Zelle :52685 bzw. 0xCDCD
-
Visual C++?
-
Jepp!
Visual Studio 2005 Professional
-
Das füllt uninitialisierte Speicherbereiche mit 0xCDCD.
Verstehe ich dich richtig das m_awPhi1 eine statische Membervariable sein soll? Und das unten die Initialisierung im Source-File sein soll? Muss dann nich noch der Klassenname davor?
-
*KopfGegenTischSchlag*
Und ich habe auch noch behauptet, es so gemacht zu haben!!

JETZT GEHTS WIRKLICH! DANKE!