Derelict SFML2 - structs are forward referenced
Lucien via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Dec 26 04:34:05 PST 2015
On Saturday, 26 December 2015 at 10:39:29 UTC, Rene Zwanenburg
wrote:
> On Saturday, 26 December 2015 at 09:48:29 UTC, Lucien wrote:
>> Hello.
>>
>> I want to use Derelict-SFML2 to create a simple window.
>> But when I compile (linked with dub and derelict-util), I have
>> the following error:
>>
>> src/app.d(30,20): Error: variable myproject.main.window no
>> definition of struct sfRenderWindow
>> ../../../.dub/packages/derelict-sfml2-3.0.1/source/derelict/sfml2/graphics.d(56,1): Error: struct derelict.sfml2.graphics.sfRenderWindow unknown size
>> src/app.d(31,5): Error: struct sfRenderWindow is forward
>> referenced
>> src/app.d(32,12): Error: struct sfRenderWindow is forward
>> referenced
>> src/app.d(35,16): Error: struct sfRenderWindow is forward
>> referenced
>> src/app.d(38,17): Error: struct sfRenderWindow is forward
>> referenced
>>
>> My code: http://pastebin.com/1svZAB22
>>
>> Is it a bug in Derelict-SFML2 or want did I do false ?
>>
>> Hoping that you understood me with my bad English :)
>
> sfRenderWindow is an opaque struct, so its size is unknown.
> This means you can only use pointers to them, and any
> operations on them will have to be done using SFML. So in your
> code, change sfRenderWindow to sfRenderWindow*.
>
> Did you by any chance look at a C++ tutorial for SFML? Derelict
> binds to the C API so it looks a bit different. To create a
> window sfRenderWindow_create can be used, so lines 12 + 13 can
> be replaced by
>
> auto window = sfRenderWindow_create(sfVideoMode(200, 200),
> "SFML works !");
>
> Another example: the function to check if a window is open is
> sfRenderWindow_isOpen, taking a pointer to an opaque
> sfRenderWindow struct as first parameter. Due to D's so called
> UFCS you can call this function in two ways:
>
> sfRenderWindow_isOpen(window); // Just like in C
> window.sfRenderWindow_isOpen(); // Use member-like syntax
Thank you.
I've this code now:
----------
sfRenderWindow* win = sfRenderWindow_create(sfVideoMode(200,
200), "SFML works !", 0, null);
sfEvent* event;
while (win.sfRenderWindow_isOpen())
{
while (win.sfRenderWindow_pollEvent(event))
{
if (event.type == sfEvtClosed)
win.sfRenderWindow_close();
}
}
---------
But when compiling I got this error:
derelict.util.exception.SymbolLoadException at ../../../.dub/packages/derelict-util-2.0.4/source/derelict/util/exception.d(35): Failed to load symbol sfJoystick_getIdentification from shared library libcsfml-window.so
Any ideas ?
More information about the Digitalmars-d-learn
mailing list