www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Error: cannot implicitly convert expression

reply "Agustin" <wolftein1 gmail.com> writes:
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
Jun 18 2013
parent reply "Agustin" <wolftein1 gmail.com> writes:
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_; }
Jun 18 2013
parent "Agustin" <wolftein1 gmail.com> writes:
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!
Jun 18 2013