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


Anmelden zum Antworten