%-Operator funktioniert nicht bei Int32
-
Hi,
warum erzeugt der Code
using namespace System; int main() { Int32 foo = 42; Int32^ bar = %foo; }
die Fehlermeldung
Der %-Operator kann nur auf eine Instanz einer Verweisklasse oder auf einen Werttyp angewendet werden.
? Immerhin ist Int32 doch eine value class...
Mit freundlichen Grüßen
Michael E.
-
/clr eingeschaltet?
-
Es funktiniert nur so:
Int32 foo = 12; Int32% bar = foo;
oder was sollte ein "%foo" bewirken???
-
/Od /D "WIN32" /D "_DEBUG" /D "_UNICODE" /D "UNICODE" /FD /EHa /MDd /Fo"Debug\\" /Fd"Debug\vc90.pdb" /W3 /nologo /c /Zi /clr /TP /errorReport:prompt
Also ja.
Mit Decimal funktionierts, mit ner eigenen Dummyklasse auch:
using namespace System; value class TestClass { }; int main() { { Decimal foo = 42; Decimal^ bar = %foo; } TestClass foo; TestClass^ bar = %foo; }
Das kompiliert fehlerfrei.
-
Jochen:
http://www.functionx.com/cppcli/handles/Lesson06c.htm schrieb:
After creating a handle, you should let the compiler know what variable it handles. To do this, assign it a declared variable preceded with the % operator, as we did for the & operator when referencing a pointer.
-
Das ist der Modulo.
Er gibt den Rest beider Werte zurück...http://de.wikipedia.org/wiki/Modulo
Int32 foo = 42; Int32^ bar = foo % 23; Console::WriteLine("{0}",bar);
-
Nein, das ist eine "Tracking Reference" in C++/CLI!
@Michael: Du solltest Dich an die MSDN Docu halten:
Tracking Reference (%):
http://msdn.microsoft.com/en-us/library/8903062a.aspx
Speziell (Tracking references and value types):
http://msdn.microsoft.com/en-us/library/hxad2z4x.aspxLimitations:
http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/a72da6d9-1964-41a2-a466-b28ab994925f/
-
Was macht denn der %-Operator in meinem letzten Beispiel? Wieso kompiliert das?
-
Jetzt seh ich es
Das "boxing" wird da automatisch gemacht, und bei "Int32" wohl nicht... muss mal nachforschen...
-
Ah, so langsam verstehe ich
Sag bitte Bescheid, wenn du etwas über die Gründe rausgefunden hast, warum hier nicht automatisch eine Kopie vom Objekt auf den managed heap gelegt wird.
-
Den grund kann ich Dir (noch) nicht sagen, aber vermutlich hängt es damit zusammen, dass Int32 ein "native Type" ist und Decimal eine "Struktur"...
PS: Warum willst Du das überhaupt machen?
-
Hab gerade erst angefangen, C++/CLI zu lernen. Der Code ist also absolut zweckfrei und dient nur dazu, dass ich die verschiedenen Typen in C++/CLI verstehe.