I have the following code:
Code:
#include <iostream>
#include <utility>
using namespace std;
template<typename T>
class Vector {
public:
Vector(unsigned int length = 10) {
}
};
template<typename P, typename Q>
class Pair {
};
template<typename P, typename Q>
class VectorOfPairs : public Vector<Pair<P, Q> > {
public:
VectorOfPairs(unsigned int length = 10) {
Vector<Pair<P, Q> >::Vector(length);
}
};
int main() {
VectorOfPairs<int, int> v;
return 0;
}
What I'm trying to do inside the "VectorOfPairs(unsigned int)" constructor is what we would write in Java as "super(length)". But for some reason, it gives me a compilation error:
Code:
test.cpp: In constructor `VectorOfPairs<P, Q>::VectorOfPairs(unsigned int) [with P = int, Q = int]':
test.cpp:26: instantiated from here
test.cpp:21: error: dependent-name ` Vector<Pair<P, Q> >::Vector' is parsed as a non-type, but instantiation yields a type
test.cpp:21: note: say `typename Vector<Pair<P, Q> >::Vector' if a type is meant
It seems to treat ` Vector<Pair<P, Q> >::Vector' as a type. But in reality, the type is ` Vector<Pair<P, Q> >', while the '::Vector' part is the constructor.
So my question is: is there anyway to tell the compiler that Vector<Pair<P,Q> > is the type?