digitalmars.D - Property access to a struct that contains struct
- Guenter (32/32) Feb 26 2017 Hi,
- Eugene Wissner (5/37) Feb 26 2017 It should be:
- Guenter (3/5) Feb 26 2017 Thank you.
- Mike Parker (5/9) Feb 26 2017 Structs in D are value types, so you're returning a copy of fext
- Guenter (3/14) Feb 26 2017 Thank you.
Hi,
i do not understand where I am wrong in this code. I seems there
is a missing constructor, but i have no idea where.
module main;
import std.stdio;
struct A_t
{
int fvalue;
A_t opCall()
{
return this;
};
property int value () { return fvalue; }
property void value (int avalue) { fvalue = avalue; }
}
struct B_t
{
A_t fext;
int opCall() { return ext.value; };
property A_t ext() { return fext; }
property void ext(A_t aext) { fext = aext; }
}
void main()
{
B_t test;
test.ext.value = 9;
int t = test();
assert ( t == 9); // t is always 0 instead of 9.
readln();
}
cu
Guenter
Feb 26 2017
On Sunday, 26 February 2017 at 11:05:42 UTC, Guenter wrote:
Hi,
i do not understand where I am wrong in this code. I seems
there is a missing constructor, but i have no idea where.
module main;
import std.stdio;
struct A_t
{
int fvalue;
A_t opCall()
{
return this;
};
property int value () { return fvalue; }
property void value (int avalue) { fvalue = avalue; }
}
struct B_t
{
A_t fext;
int opCall() { return ext.value; };
property A_t ext() { return fext; }
property void ext(A_t aext) { fext = aext; }
}
void main()
{
B_t test;
test.ext.value = 9;
int t = test();
assert ( t == 9); // t is always 0 instead of 9.
readln();
}
cu
Guenter
It should be:
property ref A_t ext() { return fext; }
you return a copy of A_t and then change this copy instead of the
real B_t member.
Feb 26 2017
On Sunday, 26 February 2017 at 11:15:21 UTC, Eugene Wissner wrote:you return a copy of A_t and then change this copy instead of the real B_t member.Thank you. Guenter
Feb 26 2017
On Sunday, 26 February 2017 at 11:05:42 UTC, Guenter wrote:Hi, i do not understand where I am wrong in this code. I seems there is a missing constructor, but i have no idea where.property A_t ext() { return fext; }Structs in D are value types, so you're returning a copy of fext here and that's what's getting updated with the new value. Try this: ref A_T ext() { return fext; }
Feb 26 2017
On Sunday, 26 February 2017 at 11:18:12 UTC, Mike Parker wrote:On Sunday, 26 February 2017 at 11:05:42 UTC, Guenter wrote:Thank you. GuenterHi, i do not understand where I am wrong in this code. I seems there is a missing constructor, but i have no idea where.property A_t ext() { return fext; }Structs in D are value types, so you're returning a copy of fext here and that's what's getting updated with the new value. Try this: ref A_T ext() { return fext; }
Feb 26 2017









Guenter <gbl1 gmx.net> 