views:

601

answers:

2
#include <iterator>
#include <map> 
#include <vector>

template <class T1, class T2>
class A
{
public:

    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;

    std::pair<iterator, bool > foo()
    {
     iterator aIter;
     return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false);
    }
};

The above code works fine for me. But I want to move the definition of the function outside the the class declaration. I tried this.

template <class T1, class T2>
class A
{
public:

    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;

    std::pair<iterator, bool > foo();
};

template <class T1, class T2>
std::pair<std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo()
{
    iterator aIter;
    return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false);
}

But it is not compiling. Any Idea how to do this?

+2  A: 

You are again missing the typename in the return value. The function should be:

template <class T1, class T2>
std::pair<typename std::vector<std::pair<T1,T2> >::iterator, bool > A<T1, T2>::foo()
{
    iterator aIter;
    return std::pair<std::vector<std::pair<T1,T2> >::iterator, bool >(aIter ,false);
}
Naveen
Thanks, it worked :)
Shino C G
+4  A: 

The answer of Naveen is correct, I can add a suggestion: I use extensively typedefs and I'm waiting template typedef and "true type definition" typedef.

template <class T1, class T2>
class A
{
public:
    typedef typename std::vector<std::pair<T1,T2> >::iterator iterator;
    typedef std::pair<iterator, bool > MyPair;
    MyPair foo();
};

template <class T1, class T2>
typename A<T1,T2>::MyPair A<T1, T2>::foo()
{
    iterator aIter;
    return MyPair(aIter ,false);
}
ugasoft
+1 certainly makes much easier to read the code
Naveen