VS2010 beta 2 - C++ Win32 - Properties
-
Hallo C++er,
in C# kann man ja ganz lässig mit Properties arbeiten. Ich versuche dies jetzt auch in C++ / Win32 unter VS2010 beta 2 (also nicht C++ für .NET), indem ich mit einer einfachen DTO Klasse Person anfange (DTO = Data Transfer Object)
Leider funktioniert das setzen (put) der Property nicht: Kompilierungsfehler.
Error 1 error C2774: 'Person::PersonName' : no 'put' method is associated with this property
//main.cpp #include <iostream> #include <string> #include "Person.h" using namespace std; int main() { //Instantiate the per of type Person Person per; per.PersonName = "Johnson"; cout << "Your name is: " << per.PersonName() << endl; return 0; } //Property.h #define PROPERTY(TYPE, NAME) __declspec(property(get=Get##NAME,put=Set##NAME)) TYPE NAME #define READONLY_PROPERTY(TYPE, NAME) __declspec(property(get=Get##NAME)) TYPE NAME #define WRITEONLY_PROPERTY(TYPE, NAME) __declspec(property(put=Set##NAME)) TYPE NAME //Person.h #pragma once #include <string> #include "Property.h" using namespace std; class Person { private: string _personName; public: Person(void); ~Person(void); READONLY_PROPERTY(string, PersonName); string GetPersonName() const { return _personName; } WRITEONLY_PROPERTY(string, PersonName); void SetPersonName(string value) { _personName = value; } }; //Person.cpp #include "Property.h" #include "Person.h" Person::Person(void) { } Person::~Person(void) { }
Wie kann ich denn diesen Fehler beheben ?
Liebe Grüsse
Alex
-
?
Du kannst nicht ein Property zweimal definieren... verwende bitte *einmal* "PROPERTY"!
-
Hallo Jochen,
vielen Dank ! Das war der entscheidende Tipp. Sieht auch viel schlanker aus...und funktioniert#pragma once #include <string> #include "Property.h" using namespace std; class Person { private: string _personName; public: Person(void); ~Person(void); PROPERTY(string, PersonName); string GetPersonName() const { return _personName; } void SetPersonName(string value) { _personName = value; } };
Danke nochmals,
Alex