extern(C++): Unresolved scalar deleting destructor

Vladimir Marchevsky vladimmi at gmail.com
Tue Jul 24 15:48:28 UTC 2018


After reading 2.081 patchnotes about improvements with binding to 
cpp classes, I'm trying to test it - with simple examples and Qt 
as cpp library.

My naive approach is to bind just a couple of used methods of 
specific classes (omitting others) and try to use it directly in 
D just with linking of default Qt5Core.lib. Sometimes it works 
just fine:

---app.d
import std.conv;
import std.stdio;

extern(C++) {
     class QVariant {
         this();
         this(int);
         this(double);
         final ~this();

         final int toInt(bool *ok = null) const;
         final double toDouble(bool *ok = null) const;
     }
}

void main()
{
     QVariant a = new QVariant(5);
     QVariant b = new QVariant(5.5);
     writeln("a: " ~ a.toInt().to!string);
     writeln("b: " ~ b.toDouble().to!string);
     readln();
}
---

This example compiles and works like a charm.

Other classes like QObject or QCoreApplication do not link with 
error like this:

cpptest.obj : error LNK2001: unresolved external symbol ""public: 
virtual void * __cdecl QObject::`scalar deleting 
destructor'(unsigned int)" (??_GQObject@@UEAAPEAXI at Z)"

There is no such symbol in Qt5Core.lib, obviously. Is it my 
mistake somewhere? Why do some classes require this destructor 
when it doesnt actually exist in lib? And why do other classes 
work without it?


More information about the Digitalmars-d-learn mailing list