Victor Bazarov wrote:
> Richard wrote:
>> First question - let's get this out of the way since it might be the
>> solution to all my woes: Does it make sense to have a .cpp file for a
>> class that is declared as having pure virtual functions in its .h
>> file?
>
> Sure, why not? If you want to provide definitions for the pure virtual
> functions, you may. It's especially useful if you ever call any of the
> functions from a c-tor of that class.
>
>> Here's my predicament. I'll put this in general terms since it's
>> happening across several classes.
>>
>> I have a base class, let's say it's named A. In A.h I DECLARE several
>> pure virtual ( = 0) functions, a virtual destructor, and a
>> constructor. Note that each of these is terminated with a semicolon,
>> hence they're not DEFINED. There is also a file A.cpp which defines
>> the constructor and destructor with empty curly braces. A.cpp and
>> A.h compile into a library file (.a) with GCC without errors.
>
> OK. Just so we are straight here, "compiles into a library" is not
> defined in C++.
>
>> There's a class B that derives class A. All of the pure virtual
>> functions are overridden by B. Class B also has a default constructor
>> (no parameters) and destructor. Class B compiles into a library
>> without error also.
>
> OK
>
>> When I go to link my executable I include the two resulting libraries.
>
> Linking with libraries isn't defined either. It's known to work in
> many compilers, but on every compiler that operation is specific to
> the implemenation.
>
>> The linker produces the error "undefined reference to A::A()" which is
>> said to occur in the constructor for class B. I've ensured that the
>> folders containing A.h and B.h are in the "include search path", and
>> I've ensured that the libraries containing A and B are included during
>> linking.
>
> Does it happen if you add all those files to the same project instead
> of using "resulting libraries"?
"add all those files to the same project" is not defined in C++.
--
-- Pete
Author of "The Standard C++ Library Extensions: a Tutorial and
Reference." For more information about this book, see
www.petebecker.com/tr1book.