On 04/01/2015 11:25 AM, Charles Hixson via Digitalmars-d-learn wrote:> The class Node is contained within the struct BTree.
> The field   btFile is contained within the struct BTree.
> The statement is within a function within the Node class.
>
> I've tried many variations, here are a few:
>
> btFile.write(self.nodeId, cast(void*)&(self));
> results in:
> need 'this' for 'btFile' of type 'BlockFile'
>
> this.btFile.write(self.nodeId, cast(void*)&(self));
> results in:
> Error: no property 'btFile' for type 'btplus.BTree.Node'
>
> this.BTree.btFile.write(self.nodeId, cast(void*)&(self));
> results in:
>   Error: constructor btplus.BTree.this (string fName) is not callable
> using argument types (Node)
>
> Perhaps BTree needs to be a class?  I made it a struct because I want it
> to definitely close properly when it
> goes out of scope.

Can you modify the definition of Node? If so, perhaps it's possible construct Node objects with a reference to its btFile:

import std.stdio;

class Node
{
    int *btFile;

    this(int *btFile)
    {
        this.btFile = btFile;
    }

    void foo()
    {
        writeln(*btFile);
    }
}

struct BTree
{
    int btFile;
    Node node;

    this(int btFile)
    {
        this.btFile = btFile;
        this.node = new Node(&this.btFile);
    }
}

void main()
{
    auto bt = BTree(42);
    bt.node.foo();
}

Ali

Reply via email to