By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,134 Members | 1,942 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,134 IT Pros & Developers. It's quick & easy.

__PureVirtualCalled

P: n/a
Hi,

I got __PureVirtualCalled exception when I have defined a public
function in the base class, and its implementation calls number of
"pure virtual functions", which are overridden in the derived class.

For example

class Base
{
public:
void foo();
virtual ~Base();
private:
virtual void pure1() = 0;
virtual void pure2() = 0;
virtual void pure3() = 0;
};

void Base::foo()
{
pure1();
pure2();
pure3();
}

class Derived : public Base
{
private:
void pure1();
void pure2();
void pure3();
};

void Derived::pure1()
{
// do something
}

void Derived::pure2()
{
// do something
}

void Derived::pure3()
{
// do something
}

Can someone please explain to me why I would be getting
__PureVirtualCalled exception? Can't I call a pure virtual function
from the base class. BTW, as you have seen I did not provide any
implementation for the pure virtual in base class.

I'm using HP's aCC compiler.

Thanks in advance.
Jul 19 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
"What Ever" <my***********@yahoo.com> wrote...
I got __PureVirtualCalled exception when I have defined a public
function in the base class, and its implementation calls number of
"pure virtual functions", which are overridden in the derived class.

For example

class Base
{
public:
void foo();
virtual ~Base();
private:
virtual void pure1() = 0;
virtual void pure2() = 0;
virtual void pure3() = 0;
};

void Base::foo()
{
pure1();
pure2();
pure3();
}

class Derived : public Base
{
private:
void pure1();
void pure2();
void pure3();
};

void Derived::pure1()
{
// do something
}

void Derived::pure2()
{
// do something
}

void Derived::pure3()
{
// do something
}

Can someone please explain to me why I would be getting
__PureVirtualCalled exception?
Cannot tell. Where do you call 'foo'? From the c-tor?
Can't I call a pure virtual function
from the base class.
You can. The result depends on where the call originates.
If it originates from a constructor or the destructor, the
result is undefined.
BTW, as you have seen I did not provide any
implementation for the pure virtual in base class.


You can call a pure virtual function from the constructor, but
in that case the call will _not_ be polymorphic. The derived
class object, which overrides those functions, has not been
constructed yet, so the call is resolved statically. If you do
not have a definition (body) for the pure virtual function you
are trying to call from a c-tor, the behaviour is undefined.

It's basically like dereferencing a null pointer.

This is one of the most dramatic differences between C++ and
Java, for example. The latter allows calling virtual functions
from constructor and does that polymorphically. So, you end up
inside a member of the derived class when the derived object
hasn't even begun constructing! Yecch...

Victor
Jul 19 '05 #2

P: n/a
my***********@yahoo.com (What Ever) wrote in message news:<fe*************************@posting.google.c om>...
Hi,

I got __PureVirtualCalled exception when I have defined a public
function in the base class, and its implementation calls number of
"pure virtual functions", which are overridden in the derived class.

For example

class Base
{
public:
void foo();
virtual ~Base();
private:
virtual void pure1() = 0;
virtual void pure2() = 0;
virtual void pure3() = 0;
};

void Base::foo()
{
pure1();
pure2();
pure3();
}

class Derived : public Base
{
private:
void pure1();
void pure2();
void pure3();
};

void Derived::pure1()
{
// do something
}

void Derived::pure2()
{
// do something
}

void Derived::pure3()
{
// do something
}

Can someone please explain to me why I would be getting
__PureVirtualCalled exception? Can't I call a pure virtual function
from the base class. BTW, as you have seen I did not provide any
implementation for the pure virtual in base class.

I'm using HP's aCC compiler.

Thanks in advance.

Victor, and David thanks for your time. No, I am not calling a virtual
function from the constructor. The problem was in my makefile, I
changed signatures of some of the functions, and that did not force
the recompilation of certain source files. I am guessing that caused
the problem, a complete re-build fixed it.

Thanks again.
Jul 19 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.