Overloading struct members (or cast?)
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Nov 18 10:28:59 PST 2014
On 11/18/2014 07:32 AM, Wsdes wrote:
> Error: need 'this' for 'string' of type 'const(char*)'
Reduced:
struct S
{
union Value
{
const char* myString;
}
}
void main()
{
auto s = S();
auto mine = s.Value.myString; // ERROR
}
You may be thinking that Value introduces a name scope so that you can
reference its myString by Value.myString.
You have two options:
a) Remove Value so that it is an anonymous union. myString becomes a
direct member of S:
struct S
{
union // <-- Anonymous
{
const char* myString;
}
}
void main()
{
auto s = S();
auto mine = s.myString; // <-- No more Value
}
b) Make S have an actual member of type Value:
struct S
{
union Value
{
const char* myString;
}
Value value; // <-- Added
}
void main()
{
auto s = S();
auto mine = s.value.myString; // <-- Note lower initial
}
Ali
More information about the Digitalmars-d-learn
mailing list