On 3 Okt., 21:58, Heck <hec...@inordertostymieharvestersverizon.net>
wrote:
> I want to further modify the new queue class to accept an int as the
> number of elements the underlying deque will allocate upon
> construction. std::deque's got a constructor for this but I can't
> figure out how to access it. I just don't understand templates
> sufficiently clearly. Would you please suggest a syntax I can use and
> explain how it works? Thanks.
Actually your problem is not related to templates at all.
You need to use the initializer list of the class, v.i.
> Here's the relevant part of the code:
> #include <deque>
> #include <exception>
>
> template <class T> class QUEUE2 {
I strongly recommend that you don't use all-upper-case
names for non-macro entities. Why is Queue2 not ok for you?
I have the above mentioned book not at my hands, but if
this also uses this nameing scheme, you should not copy
this style.
> protected:
> std::deque<T> c; // the actual container
>
> public:
> /* *********
> This sad business makes the code fail to compile. I've tried a
> number of variations which result in redefinitions of c (the actual
> container) or c not found.
> // constructor - allow a pre-allocation for the deque's elements
> QUEUE2( int prealloc) {
> std::deque<T> c( prealloc ); // the actual container
> }
> ********** */
As you already recognize, you are defining a new, local
entity c here. If you want to initialize base classes
or members (as the member c in your example), you have to
use the so-called member-initializer list therefore:
QUEUE2( int prealloc) : c(prealloc) {
}
Greetings from Bremen,
Daniel Krügler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]