I think I am stuck in the easiest of the issues and yet it seems I cannot get around this.
I have a C++ file:
```
class MyClass {
public:
    int field;
    MyClass(int a) : field(a) {}

    int add(int asd) {
        return asd + 1;
    }
};

MyClass* instantiate(int asd) {
    return new MyClass(asd);
}
```
and a D file:
```
extern(C++) {
        class MyClass {
                public: 
                        int field;
                        @disable this();
                        final int add(int asd);
                }

        MyClass instantiate(int asd);
}

void main()
{
        import std : writeln;
        auto myclass = instantiate(100);
        writeln(myclass.field);
}
```
This is a very simplified version of the dlang official example of interfacing with C++ classes.

When I compile, I can't correctly read 'field'. What I do:
```
g++ -c cpp.cpp
dmd app.d cpp.o -L-lstdc++
./app
```
What I get:
```
0
```
Instead of the expected 100.

Care to help me understand what am I doing wrong?

Side question: it seems that I need to declare every class method as "final" otherwise I get undefined references during linking. Is this expected behaviour?

Thanks

Reply via email to