Benutzer mit den meisten Antworten
Using a value struct as a property of another class

Frage
-
Hi there,
I'm quit new to C++/CLI. I wrote a value struct including several values. I want to use an instance of that class as a data member of another class, a property to be more precisely. That works just fine, but I somehow can't assign values to the struct's members. The compiler always gives me Error C2106: left operand must be l-value. Code as follows:
namespace name{ public value struct B sealed { int member; }; public ref class N sealed { public: property B b; N() { b.member = 0; //C2106 } }; }
Antworten
-
Hallo,
jetzt bin ich mit meinen C++/CLI Kennnissen für Apps am Ende angelangt.Ich fand allerdings den Artikel Visual C++ WinRT FAQ – Non-RT types in public signature. Demnach machst du einen nativen Typ nach außen hin sichtbar - und das geht nicht.
Beim herum probieren wurde mir dann auch klar, warum C2106 kommt. Eigenschaften sind nichts weiter als eine get- und eine set-Methode für einen Wert:
private: B _Property; public: property B Property{ B get(){ return _Property; } void set(B prop){ _Property = prop; } }
Wenn man nun Property abruft, so bekommt man einen Wert zurück geliefert.Davon eine Unter-Eigenschaft zu ändern macht jedoch keinen Sinn, da diese sowieso nicht zurück geschrieben werden würde.
So funktioniert es allerdings:
ref struct B sealed { private: int member = 0; public: property int Member{ int get(){ return member; } void set(int prop){ member = prop; } } }; ref class N sealed { private: B^ property = ref new B(); public: property B^ Property{ B^ get(){ return property; } void set(B^ prop){ property = prop; } } N() { Property->Member = 0; //kein C2106 } };
Wie das Ganze in C++ ohne Referenztyp funktioniert, weis ich nicht.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Sonntag, 4. Januar 2015 20:52
Alle Antworten
-
Hi Liechtenschwein,
you are in the German MSDN Forums. You should ask your questions in German ;)I am not an expert in C++(/CLI), but if you use a Pointer (B*) instead of B, then it works fine.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets -
Oh sry, nicht aufgepasst :D Danke erstmal für die Antwort. Dann bekomme ich aber den Fehler C3992: 'get': Die Signatur des öffentlichen Members enthält den ungültigen Typ 'name::B *'
- Bearbeitet Liechtenschwein Freitag, 26. Dezember 2014 13:13
-
Hallo,
jetzt bin ich mit meinen C++/CLI Kennnissen für Apps am Ende angelangt.Ich fand allerdings den Artikel Visual C++ WinRT FAQ – Non-RT types in public signature. Demnach machst du einen nativen Typ nach außen hin sichtbar - und das geht nicht.
Beim herum probieren wurde mir dann auch klar, warum C2106 kommt. Eigenschaften sind nichts weiter als eine get- und eine set-Methode für einen Wert:
private: B _Property; public: property B Property{ B get(){ return _Property; } void set(B prop){ _Property = prop; } }
Wenn man nun Property abruft, so bekommt man einen Wert zurück geliefert.Davon eine Unter-Eigenschaft zu ändern macht jedoch keinen Sinn, da diese sowieso nicht zurück geschrieben werden würde.
So funktioniert es allerdings:
ref struct B sealed { private: int member = 0; public: property int Member{ int get(){ return member; } void set(int prop){ member = prop; } } }; ref class N sealed { private: B^ property = ref new B(); public: property B^ Property{ B^ get(){ return property; } void set(B^ prop){ property = prop; } } N() { Property->Member = 0; //kein C2106 } };
Wie das Ganze in C++ ohne Referenztyp funktioniert, weis ich nicht.
Tom Lambert - C# MVP
Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets- Als Antwort markiert Dimitar DenkovMicrosoft contingent staff, Moderator Sonntag, 4. Januar 2015 20:52
-
Hallo Liechtenschwein,
Ich schließe jetzt den Thread ab, sofern Toms Verfahren mit Referenztypen zum erwünschten Ergebnis führt. Andere Vorschläge bleiben weiterhin willkommen.
Gruß,
DimitarBitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „IT-Pros helfen IT-Pros“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.