you probably never defined it. That statement is a function declaration, and it requires a function definition somewhere. Your program calls the destructor whenever a function creates an object and then returns--all local objects are destoyed when a function ends--and that's when your destructor was called, and the compiler couldn't find the definition.

If you don't want your destructor to do anything extra just declare it and define it to do nothing at the same time:

virtual ~RndNum()
{

}

or as its more commonly written:

virtual ~RndNum() {}

(don't forget: no semi-colon is used after a function definition)

or don't declare it at all, and the compiler will supply a default constructor.