gagajanice
asked on
An object of abstract class cannot be created
hi,
when i try to compile my source code, i get this error:
"/development/demusr/osrc/ hello_02/h ello_02-0. 0.0/libsrc /CustRegis ter.cxx", line 6.44: 1540-1107 (S) An object of abstract class "CustLoaderFactory" cannot be created.
"/development/demusr/inclu de/SdkTarg etFactory. h", line 44.21: 1540-1112 (I) "TargetFactory<TsfLoader>: :createCon dition(cha r *, const void *)" is a pure virtual function.
"/development/demusr/inclu de/SdkTarg etFactory. h", line 58.25: 1540-1112 (I) "TargetFactory<TsfLoader>: :getTarget Obj(char *, const void *)" is a pure virtual function.
"/development/demusr/inclu de/ObjectC ollector.h ", line 55.23: 1540-1112 (I) "ObjectCollector<TsfLoader >::createI nstance(co nst char *, const void *)" is a pure virtual function.
"/development/demusr/inclu de/ObjectC ollector.h ", line 56.22: 1540-1112 (I) "ObjectCollector<TsfLoader >::reuseIn stance(Tsf Loader *, const char *, const void *)" is a pure virtual function.
"/development/demusr/osrc/ hello_02/h ello_02-0. 0.0/libsrc /../includ e/CustRegi stration.h ", line 15.40: 1540-0202 (S) An expression of type "void *" is not allowed on the left side of "->".
Appreciate if you can advise on this with some explaination.
Thank you in advance.
when i try to compile my source code, i get this error:
"/development/demusr/osrc/
"/development/demusr/inclu
"/development/demusr/inclu
"/development/demusr/inclu
"/development/demusr/inclu
"/development/demusr/osrc/
Appreciate if you can advise on this with some explaination.
Thank you in advance.
header file
===========
#ifndef _CUSTLOADERFACTORY_H_
#define _CUSTLOADERFACTORY_H_
#include <TsfLoader.h>
#include <SdkTargetFactory.h>
#include <ObjectCollector.h>
class CustLoaderFactory : public TargetFactory<TsfLoader>
,public ObjectCollector<TsfLoader>
{
public:
virtual int createCondition(char *condition, void *entity_type);
virtual TsfLoader *getTargetObj(char *condition, void *entity_type);
virtual TsfLoader *createInstance(const char *condition, void *entity_type);
virtual int reuseInstance(TsfLoader *instance, const char *condition, void *entity_type);
};
#endif
source file
===========
#include <CustomerCard.h>
// Included all customized loader classes headers here
#include "CustLoaderFactory.h"
//entity_type is passed in as a string for now
CustLoaderFactory::createCondition(char *condition, void *entity_type)
{
strcpy(condition, (char *)entity_type);
return 0;
}
TsfLoader *CustLoaderFactory::getTargetObj(char *condition, void *entity_type)
{
return getObject(condition, entity_type);
}
TsfLoader *CustLoaderFactory::createInstance(const char *condition, void *name)
{
TsfLoader *obj = NULL;
if (strcmp(condition, ENTITY_TYPE_CARD) == 0)
obj = new CustomerCard();
else
obj = NULL;
if ( obj )
OTraceDebug("D-CUSTTSF-0001: Create Instance[%s]\n", condition);
else
OTraceError("F-CUSTTSF-0002: Unknown Object Name[%s]\n", condition);
return obj;
}
int CustLoaderFactory::reuseInstance(TsfLoader *instance, const char *condition, void *entity_type)
{
return 0;
}
can u post SdkTargetFactory.h?
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
You are also trying to instantiate a class of CustLoaderFactory where it is abstract. You need to instantiate a derived class rather than the abstract class. If you are just using a reference to a CustLoaderFactory instance in CustRegister.cxx then you don;t need to create it, you just need to refer to an existing instance.
>> You are also trying to instantiate a class of CustLoaderFactory where it is abstract.
It's not abstract, none of the members are pure virtual.
It's not abstract, none of the members are pure virtual.
/development/demusr/osrc/h ello_02/he llo_02-0.0 .0/libsrc/ CustRegist er.cxx", line 6.44: 1540-1107 (S) An object of abstract class "CustLoaderFactory" cannot be created.
>> It's not abstract, none of the members are pure virtual.
No - I guess not.
>> It's not abstract, none of the members are pure virtual.
No - I guess not.
Abstract status is inherited while all interfaces or pure virtual functions from base classes are not implemented.
I dont know OjectCollector.h and SdkTargetFactory.h, so I can't guess what implementation are required, but it's inside them that you'll find the solution.
I dont know OjectCollector.h and SdkTargetFactory.h, so I can't guess what implementation are required, but it's inside them that you'll find the solution.
ASKER
The argument type that i declared in my header file and source file is different from the OjectCollector.h and SdkTargetFactory.h. My bad for not paying enough attention to it. Thanks guys!
>> The argument type that i declared in my header file and source file is different from the OjectCollector.h and SdkTargetFactory.h
What aregument type do you refer? Function arguments? I explained in http:#34091062 exactly why you were getting the error. You were subclassing abstract classes so you either needed to implement the exact same functions as those that were in the base classes that were pure virtual or not sublclass abstract classes.
Can you expand on that because it doesn't explain how you fixed the issue?
Also, I don't see how the answers you've selected answer your problem.
What aregument type do you refer? Function arguments? I explained in http:#34091062 exactly why you were getting the error. You were subclassing abstract classes so you either needed to implement the exact same functions as those that were in the base classes that were pure virtual or not sublclass abstract classes.
Can you expand on that because it doesn't explain how you fixed the issue?
Also, I don't see how the answers you've selected answer your problem.
#3 - http:#34091062 explained exactly what the error was and what steps needed to be taken to fix it.
No other post provided an reason for the error or a solution.
No other post provided an reason for the error or a solution.