I have the following classes, Base and Derived and when I compile the compiler complains that it cannot create an instance of DLog because it is abstract.
Can someone te
virtual void log(string logText, int debugLevel, string threadName = "") = 0;
has not been implemented in class DLog. You have to implement it because it's pure virtual in the base class.
You probably meant this in your first overload of log
in DLog
:
virtual void log(string logText, int debugLevel, string /*threadname*/)
{
Log(const_cast<char*>(logText.c_str()));
}
EDIT: You also have not implemented the overload of
virtual void log(int debugLevel, char* fmt, ...) = 0;
Note here though that using the const_cast
is a very bad idea and is undefined behavior. You can get well defined behavior by doing something like this instead:
virtual void log(string logText, int debugLevel, string /*threadname*/)
{
logText.push_back('\0'); // Add null terminator
Log(&logText[0]); // Send non-const string to function
logText.pop_back(); // Remove null terminator
}
Better yet though, just make "Log" const-correct in the first place.
By deriving your DLog
class from Logger
you are assuring that you will provide the implementation for all (assuming you don't want DLog
as an abstract class) pure virtual methods declared in the base class. Here you have not provided implementation to pure virtual functions hence class DLog
becomes an abstract class. In C++ you can not create an instance of an abstract class hence you get the compiler error. BTW, your base class is missing the virtual destructor.