If you get a link error of the form "Error: Unresolved or undefined symbols detected: virtual table for class Fred," you probably have an undefined virtual member function in class Fred.
The compiler typically creates a magical data structure called the "virtual table" for classes that have virtual functions (this is how it handles dynamic binding). Normally you don't have to know about it at all. But if you forget to define a virtual function for class Fred, you will sometimes get this linker error.
Here's the nitty gritty: Many compilers put this magical "virtual table" in the compilation unit that defines the first non-inline virtual function in the class. Thus if the first non-inline virtual function in Fred is wilma(), the compiler will put Fred's virtual table in the same compilation unit where it sees Fred::wilma(). Unfortunately if you accidentally forget to define Fred::wilma(), rather than getting a Fred::wilma() is undefined, you may get a "Fred's virtual table is undefined". Sad but true.
--------------------------------------------------
From: "Naja Melan" <naja...@gmail.com>
Sent: Wednesday, February 20, 2008 10:01 AM
To: <cryptop...@googlegroups.com>
Subject: some help needed for beginner (Crypto++ 5.5.2 - Ubuntu Feisty -
Eclipse - GCC4)
> Hi,
>
> Im trying to use crypto++, but Im a complete beginner at linux, C++ and
> eclipse, and its not really working out... I want to write a hash
> calculator to get the hang of C++ and Qt and wanted to use the crypto++
> library for the hash functions. I have gotten this far:
>
> downloaded crypto from sourceforge, then unzip -a, make all install. All
> without errors :)
> (I tried before compiling it in eclipse, and that gave about 300 errors, i
> don't understand why...)
>
> Now i would like to use it for a managed make C++ project in Eclipse
> (other
> small C++ apps compile, build and run without problem). I have the right
> dir
> in my include path (/usr/include/cryptopp/)* *and made a little test
> source
> to see what happens:
>
> #include "sha.h"
> using namespace CryptoPP;
>
> int main()
> {
> * SHA hash;*
> return 0;
> }
>
>
> The marked line gives the following errors:
>
> 1. */usr/include/cryptopp/cryptlib.h* undefined reference to `vtable
> for CryptoPP::HashTransformation'
> 2. */usr/include/cryptopp/iterhash.h* undefined reference to
> `CryptoPP::IteratedHashBase<unsigned int,
> CryptoPP::HashTransformation>::IteratedHashBase()'
> 3. */usr/include/cryptopp/iterhash.h* undefined reference to
> `CryptoPP::SHA1::InitState(unsigned int*)'
> 4. */usr/include/cryptopp/iterhash.h* undefined reference to
> `CryptoPP::SHA1::Transform(unsigned int*, unsigned int const*)'
> 5. */usr/include/cryptopp/iterhash.h* undefined reference to `vtable