Derelict SFML2 - structs are forward referenced

drug via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Dec 26 04:47:51 PST 2015


26.12.2015 15:34, Lucien пишет:
> 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 ?
>
>
You have old version of libcsfml that lacks of symbol 
sfJoystick_getIdentification. Try another version, may be build it from 
sources to have the newest one.


More information about the Digitalmars-d-learn mailing list