www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Equivalent to nullptr

reply Leonardo <leotada523 gmail.com> writes:
I was trying to use Derelict-SDL2 library, and the tutorial do 
this code below, as C++ code has nullptr word. How I use this?


---------------------------------
struct Ball
{
   SDL_Rect bbox = {0, 0, 100, 100};
   SDL_Point vel = {1, 1};
}
---------------------------------
case SDL_MOUSEBUTTONDOWN:
{
   SDL_Point mousePos = {event.button.x, event.button.y};
   if(event.button.button == SDL_BUTTON_LEFT && 
SDL_EnclosePoints(&mousePos, 1, &ball.bbox, nullptr) )
   {
     SDL_Log("CLICK");
     if(abs(ball.vel.x) < 32)
     {
       ball.vel.x *= 2;
       ball.vel.y *= 2;
     }
   }
   break;
}
May 03 2017
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 4 May 2017 at 02:12:13 UTC, Leonardo wrote:
 nullptr word. How I use this?
Does it work if you just use `null` ?
May 03 2017
parent reply Leonardo <leotada523 gmail.com> writes:
On Thursday, 4 May 2017 at 02:45:30 UTC, Adam D. Ruppe wrote:
 On Thursday, 4 May 2017 at 02:12:13 UTC, Leonardo wrote:
 nullptr word. How I use this?
Does it work if you just use `null` ?
No. First I got: source/app.d(45,69): Error: expression (*SDL_EnclosePoints)(& mousePos, 1, &ball.bbox, null) of type void does not have a boolean value then I change to: event.button.button == SDL_BUTTON_LEFT && SDL_TRUE == SDL_EnclosePoints(&mousePos, 1, &ball.bbox, null) and got: source/app.d(45,81): Error: void has no value source/app.d(45,52): Error: incompatible types for ((SDL_TRUE) == ((*SDL_EnclosePoints)(& mousePos, 1, &ball.bbox, null))): 'int' and 'void'
May 03 2017
next sibling parent Stanislav Blinov <stanislav.blinov gmail.com> writes:
On Thursday, 4 May 2017 at 03:59:36 UTC, Leonardo wrote:
 On Thursday, 4 May 2017 at 02:45:30 UTC, Adam D. Ruppe wrote:
 On Thursday, 4 May 2017 at 02:12:13 UTC, Leonardo wrote:
 nullptr word. How I use this?
Does it work if you just use `null` ?
No. First I got: source/app.d(45,69): Error: expression (*SDL_EnclosePoints)(& mousePos, 1, &ball.bbox, null) of type void does not have a boolean value then I change to: event.button.button == SDL_BUTTON_LEFT && SDL_TRUE == SDL_EnclosePoints(&mousePos, 1, &ball.bbox, null) and got: source/app.d(45,81): Error: void has no value source/app.d(45,52): Error: incompatible types for ((SDL_TRUE) == ((*SDL_EnclosePoints)(& mousePos, 1, &ball.bbox, null))): 'int' and 'void'
Ahh, looks to be a bug in DerelictSDL2. null will work for that last parameter, the problem is that the function should be returning an SDL_bool, but in Derelict it's declared as returning void: that's what the error message is saying. I'll file a report, but with the conference underway, it may take a while to get fixed.
May 03 2017
prev sibling parent reply Stanislav Blinov <stanislav.blinov gmail.com> writes:
In the meantime, you can get around the issue by redeclaring the 
function with another name and loading it manually just after 
calling DerelictSDL2.load():

import derelict.sdl2.sdl;

__gshared SDL_bool function (const(SDL_Point)*, int, 
const(SDL_Rect)*, SDL_Rect*) SDL_EnclosePoints_;

void main()
{
    DerelictSDL2.load();
    DerelictSDL2.bindFunc(cast(void**)&SDL_EnclosePoints_, 
 "SDL_EnclosePoints");
    // ...
}
Now you'd need to call SDL_EnclosePoints_ instead of SDL_EnclosePoints.
May 03 2017
parent Leonardo <leotada523 gmail.com> writes:
On Thursday, 4 May 2017 at 04:34:40 UTC, Stanislav Blinov wrote:
 In the meantime, you can get around the issue by redeclaring 
 the function with another name and loading it manually just 
 after calling DerelictSDL2.load():

import derelict.sdl2.sdl;

__gshared SDL_bool function (const(SDL_Point)*, int, 
const(SDL_Rect)*, SDL_Rect*) SDL_EnclosePoints_;

void main()
{
    DerelictSDL2.load();
    DerelictSDL2.bindFunc(cast(void**)&SDL_EnclosePoints_, 
 "SDL_EnclosePoints");
    // ...
}
Now you'd need to call SDL_EnclosePoints_ instead of SDL_EnclosePoints.
Thank you.
May 16 2017