0

I am completely unable to solve below compilation error:

#include <iostream>
#include <boost/lockfree/queue.hpp>

class C 
{
public:
static int size;
};

int C::size = 10;

template <class temp>
class B: public temp
{
class A
{
public:

    static A pool[temp::size];

    static boost::lockfree::queue<A*> mpool;

    static bool firstTime;

};
public:
    void show() { std::cout << "Called Show" << std::endl; }
};

template <class temp>
bool B<temp>::A::firstTime = true;

template <class temp>
typename  B<temp>::A B<temp>::A::pool[temp::size];

template <class temp>
boost::lockfree::queue<B<temp>::A*> B<temp>::A::mpool(temp::size);

int main()
{
B<C> d;
d.show();
}

It states below error - I tried to hard but was unable to solve the issue - help needed:

test11.cpp:37:39: error: type/value mismatch at argument 1 in template parameter list for 'template<class T, class A0, class A1, class A2> class boost::lockfree::queue'
     boost::lockfree::queue<B<temp>::A*> B<temp>::A::mpool(temp::size);
                                       ^
test11.cpp:37:39: error:   expected a type, got '(B<temp>::A * <expression error>)'
test11.cpp:37:58: error: invalid type in declaration before '(' token
     boost::lockfree::queue<B<temp>::A*> B<temp>::A::mpool(temp::size);
                                                          ^
test11.cpp:37:58: error: conflicting declaration 'int B<temp>::A::mpool'
test11.cpp:21:40: note: previous declaration as 'boost::lockfree::queue<B<temp>::A*> B<temp>::A::mpool'
      static boost::lockfree::queue<A*> mpool;
                                        ^
test11.cpp:37:58: error: declaration of 'boost::lockfree::queue<B<temp>::A*> B<temp>::A::mpool' outside of class is not definition [-fpermissive]
     boost::lockfree::queue<B<temp>::A*> B<temp>::A::mpool(temp::size);
Programmer
  • 8,303
  • 23
  • 78
  • 162

1 Answers1

0

You're missing a typename declaration here.

template<class T> boost::lockfree::queue<typename B<T>::A*> B<T>::A::mpool(T::size);

It is not obvious that B<T>::A is a type name.

Kaveh Vahedipour
  • 3,412
  • 1
  • 14
  • 22