Interner Fehler (Cpp.Net)
-
Abend...
Ich hab grad folgenden Code eingegeben (es geht um eine Bitmapklasse) :Bitmap(System::String __gc *FileName) : System::Object() { System::Int32 __cix, __ciy; System::Drawing::Color __color; System::Drawing::Bitmap __gc *__file = __gc new System::Drawing::Bitmap(FileName); this->__data = new System::Byte[__file->Width, __file->Height, 0x4]; for (__cix = 0x0; __cix < __file->Width; ++__cix) { for (__ciy = 0x0; __ciy < __file->Height; ++__ciy) { __color = __file->GetPixel(__cix, __ciy); this->__data[__cix, __ciy, 0x0] = __color.A; this->__data[__cix, __ciy, 0x1] = __color.R; this->__data[__cix, __ciy, 0x2] = __color.G; this->__data[__cix, __ciy, 0x3] = __color.B; } } __file->Dispose(); }
Dieser Konstruktor lässt sich nicht kompilieren; Der Compiler meldet einen internen Fehler
! Da ist doch nichts besonderes dran, oder ?
-
Es wird immer besser
:
System::Byte __vals __gc[]; System::Drawing::Color __color; ... __vals[0] = __color.A; __vals[1] = __color.R; __vals[2] = __color.G; __vals[3] = __color.B;
Das gibt einen internen Fehler
!
-
Ah, jez hab ich eine Lösung gefunden, aber das ist krank
:
System::Byte __vals __gc[], a, r, g, b; System::Drawing::Color __color; ... a = __color.A; r = __color.R; g = __color.G; b = __color.B; ... __vals[0] = a; __vals[1] = r; __vals[2] = g; __vals[3] = b;
So gehts...
-
Wenn du lesbareren Code schreiben würdest, würdest du vielleicht mehr Antworten kriegen. Wenn ich in einem Forenbeitrag einen Code sehe, bei dem jeder Bezeichner ein "__" hat und bei dem die Variablen ansonsten auch noch "cix", "gc" usw. heißen, dann gehe ich erstmal davon aus, dass der, der den Code geschrieben hat, wohl nicht will, dass ihn jemand liest. Ich mach das dann auch nicht.
-
Nur zur Information :
__gc ist keine Variable, sondern ein Attribut (steht für GarbageCollected oder so). __ hab ich mir so angewöhnt, weil ich die Variablen in Methoden von denen in den Klassen klar unterscheiden können will...
-
Du mußt es wissen. Ich habe dir ja nur gesagt, was mein Eindruck ist. Der ändert sich durch irgendwelche Erklärungen deinerseits natürlich nicht. Das ist und bleibt unlesbar. Mehrere Anweisungen in einer Zeile, wie du sie hier hast, sind übrigens auch ganz toll!
-
Auf jeden Fall konnte ich das Prob. selbst lösen (auf das kommts ja an, oder ?)
.
-
Du verwendest zwei Unterstriche, was in C++ verboten ist (AFAIK auch in managed C++) -> Der Code ist falsch. Der Compiler muss ihn also nicht übersetzen. Allerdings steht im Standard nicht, das der Compiler einen Fehler melden muss. Also ist die Reaktion "interner Compilerfehler" eine völlig legale und korrekte Reaktion.
Es kann funktionieren, muss aber nicht. Du solltest deine Bezeichner grundsätzlich nicht mit Unterstrichen beginnen (jenachdem ob ein großer oder kleiner buchstabe folgt reserviert für den Compiler selbst oder für die Standardbibliothek) und Sie dürfen keine doppelten (oder noch mehr) Unterstruche enthalten (reserviert für compilereigene Zwecke). Du verstößt gegen beides auf einmal.