Thread overview
Error: cannot implicitly convert expression
Jun 18, 2013
Agustin
Jun 18, 2013
Agustin
Jun 18, 2013
Agustin
June 18, 2013
Hello!, i'm having a problem and i don't know how to fix it :(.

/**
 * Define a common structure for any event.
 *
 * @author Wolftein <wolftein@ghrum.org>
 */
public class Event(T) {

	private bool cancelled_;
	private shared static HandlerList!T handler_;
	
	/**
	 * Return if the event was cancelled.
	 */
	final public bool isCancelled() {
		return cancelled_;
	}
	
	/**
	 * Set the cancelled flag.
	 *
	 * @param cancelled the cancelled flag value
	 */
	final public void setCancelled(bool cancelled) {
		cancelled_ = cancelled;
	}
	
	/**
	 * Gets the unique handler of the event, the handler
	 * contains a list of delegates to be executed when
	 * the event triggers an action.
	 */
	final public HandlerList!T getHandler() {
		return handler_;
	}
	
	/**
	 * Gets the unique handler of the event, the handler
	 * contains a list of delegates to be executed when
	 * the event triggers an action. This function is
	 * static, so can be called like Template.getHandler()
	 */
	final public HandlerList!T getHandler() {
		return handler_;
	}
}

---------------------------------------------------------------
class PlayerLoginEvent : Event!(PlayerLoginEvent) {
	int x;
}

src\Event\Event.d(41): Error: cannot implicitly convert expression (handler_) of type shared(HandlerList) to ghrum.event.HandlerList.HandlerList!(PlayerLoginEvent).HandlerList
src\Event\Event.d(51): Error: cannot implicitly convert expression (handler_) of type shared(HandlerList) to ghrum.event.HandlerList.HandlerList!(PlayerLoginEvent).HandlerList
June 18, 2013
On Tuesday, 18 June 2013 at 21:39:35 UTC, Agustin wrote:
> Hello!, i'm having a problem and i don't know how to fix it :(.
>
> /**
>  * Define a common structure for any event.
>  *
>  * @author Wolftein <wolftein@ghrum.org>
>  */
> public class Event(T) {
>
> 	private bool cancelled_;
> 	private shared static HandlerList!T handler_;
> 	
> 	/**
> 	 * Return if the event was cancelled.
> 	 */
> 	final public bool isCancelled() {
> 		return cancelled_;
> 	}
> 	
> 	/**
> 	 * Set the cancelled flag.
> 	 *
> 	 * @param cancelled the cancelled flag value
> 	 */
> 	final public void setCancelled(bool cancelled) {
> 		cancelled_ = cancelled;
> 	}
> 	
> 	/**
> 	 * Gets the unique handler of the event, the handler
> 	 * contains a list of delegates to be executed when
> 	 * the event triggers an action.
> 	 */
> 	final public HandlerList!T getHandler() {
> 		return handler_;
> 	}
> 	
> 	/**
> 	 * Gets the unique handler of the event, the handler
> 	 * contains a list of delegates to be executed when
> 	 * the event triggers an action. This function is
> 	 * static, so can be called like Template.getHandler()
> 	 */
> 	final public HandlerList!T getHandler() {
> 		return handler_;
> 	}
> }
>
> ---------------------------------------------------------------
> class PlayerLoginEvent : Event!(PlayerLoginEvent) {
> 	int x;
> }
>
> src\Event\Event.d(41): Error: cannot implicitly convert expression (handler_) of type shared(HandlerList) to ghrum.event.HandlerList.HandlerList!(PlayerLoginEvent).HandlerList
> src\Event\Event.d(51): Error: cannot implicitly convert expression (handler_) of type shared(HandlerList) to ghrum.event.HandlerList.HandlerList!(PlayerLoginEvent).HandlerList


The last function is:

	final static public HandlerList!T getHandler() {
		return handler_;
	}
June 18, 2013
On Tuesday, 18 June 2013 at 21:43:17 UTC, Agustin wrote:
> On Tuesday, 18 June 2013 at 21:39:35 UTC, Agustin wrote:
>> Hello!, i'm having a problem and i don't know how to fix it :(.
>>
>> /**
>> * Define a common structure for any event.
>> *
>> * @author Wolftein <wolftein@ghrum.org>
>> */
>> public class Event(T) {
>>
>> 	private bool cancelled_;
>> 	private shared static HandlerList!T handler_;
>> 	
>> 	/**
>> 	 * Return if the event was cancelled.
>> 	 */
>> 	final public bool isCancelled() {
>> 		return cancelled_;
>> 	}
>> 	
>> 	/**
>> 	 * Set the cancelled flag.
>> 	 *
>> 	 * @param cancelled the cancelled flag value
>> 	 */
>> 	final public void setCancelled(bool cancelled) {
>> 		cancelled_ = cancelled;
>> 	}
>> 	
>> 	/**
>> 	 * Gets the unique handler of the event, the handler
>> 	 * contains a list of delegates to be executed when
>> 	 * the event triggers an action.
>> 	 */
>> 	final public HandlerList!T getHandler() {
>> 		return handler_;
>> 	}
>> 	
>> 	/**
>> 	 * Gets the unique handler of the event, the handler
>> 	 * contains a list of delegates to be executed when
>> 	 * the event triggers an action. This function is
>> 	 * static, so can be called like Template.getHandler()
>> 	 */
>> 	final public HandlerList!T getHandler() {
>> 		return handler_;
>> 	}
>> }
>>
>> ---------------------------------------------------------------
>> class PlayerLoginEvent : Event!(PlayerLoginEvent) {
>> 	int x;
>> }
>>
>> src\Event\Event.d(41): Error: cannot implicitly convert expression (handler_) of type shared(HandlerList) to ghrum.event.HandlerList.HandlerList!(PlayerLoginEvent).HandlerList
>> src\Event\Event.d(51): Error: cannot implicitly convert expression (handler_) of type shared(HandlerList) to ghrum.event.HandlerList.HandlerList!(PlayerLoginEvent).HandlerList
>
>
> The last function is:
>
> 	final static public HandlerList!T getHandler() {
> 		return handler_;
> 	}

I just fixed by replacing shared with __gshared. Another issue that i have is that if i have.

public class Event(T) {
	static public HandlerList!T getHandler() {
		if( handler_ is null ) {
			handler_ = new HandlerList!T();
		}
		return handler_;
	}
}

public class MyPlayerEvent : Event!MyPlayerEvent {
}

MyPlayerEvent.getHandler(); -> Error: need 'this' for getHandler type HandlerList().

Thanks in advance!