Jump to content

  • Log In with Google      Sign In   
  • Create Account


#ActualMoonkis

Posted 07 November 2012 - 10:17 AM

The line you mentioned occurs only in Locator::service(), and in that context, the symbol service is a function pointer to Locator::service() and thus not assignable to the type of the member mService. Furthermore, in Locator::provide(), you're not comparing the argument to null in the if-statement, but you're assigning to it.

Never paraphrase an error message, you should always copy and paste them as they are, because getting even a small detail wrong or missing can greatly change the meaning of the error and the interpretation of the situation. You may then get the wrong answer because we assumed the wrong situation about your code.


EDIT: It gave me compiling errors, nvm.
These are the errors:

Game.obj : error LNK2001: unresolved external symbol "private: static class AudioService * Locator<class AudioService,class NullAudio>::mService" (?mService@?$Locator@VAudioService@@VNullAudio@@@@0PAVAudioService@@A)
1>Game.obj : error LNK2001: unresolved external symbol "private: static class NullAudio Locator<class AudioService,class NullAudio>::nullService" (?nullService@?$Locator@VAudioService@@VNullAudio@@@@0VNullAudio@@A)


and here is the current code:
template<class T, class B>
class Locator
{
public:
static void Locator<T,B>::provide(T* service)
{
  if( service == NULL )
   Locator<T,B>::mService = &Locator<T,B>::nullService;
  else
   Locator<T,B>::mService = service;
}
static T* service()
{
  if( Locator<T,B>::mService == NULL )
   return &Locator<T,B>::nullService;
  else
   return Locator<T,B>::mService;
}
private:
static T* mService;
static B nullService;
};

#1Moonkis

Posted 07 November 2012 - 10:11 AM

The line you mentioned occurs only in Locator::service(), and in that context, the symbol service is a function pointer to Locator::service() and thus not assignable to the type of the member mService. Furthermore, in Locator::provide(), you're not comparing the argument to null in the if-statement, but you're assigning to it.

Never paraphrase an error message, you should always copy and paste them as they are, because getting even a small detail wrong or missing can greatly change the meaning of the error and the interpretation of the situation. You may then get the wrong answer because we assumed the wrong situation about your code.

It's so obvious now that it's insane, man I must have really been tired! Thank you! And yeah, sorry will quote the exact error next time.
But my mind is boggled, I feel that I should receive an compiling error with this code right here but I don't
if( service == NULL )
  Locator<T,B>::mService = Locator<T,B>::nullService;
else
  Locator<T,B>::mService = service;
mService is of T* and nullService is of type B ( which SHOULD be a derived from T ). Isn't the correct syntax: T* ptr = &B?

PARTNERS