#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 个解决方案
#1
You are again missing the typename in the return value. The function should be:
您再次缺少返回值中的typename。功能应该是:
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);
}
#2
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.
Naveen的答案是正确的,我可以添加一个建议:我广泛使用typedef,我正在等待模板typedef和“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);
}
#1
You are again missing the typename in the return value. The function should be:
您再次缺少返回值中的typename。功能应该是:
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);
}
#2
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.
Naveen的答案是正确的,我可以添加一个建议:我广泛使用typedef,我正在等待模板typedef和“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);
}