首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

模版,该如何处理

2012-05-04 
模版C/C++ code/*这段代码在VS2010通过编译且结果如预期。在gcc下却不能编译。gcc给出的错误:error: depende

模版

C/C++ code
/*这段代码在VS2010通过编译且结果如预期。在gcc下却不能编译。gcc给出的错误:error: dependent-name 'std::iterator_traits::iterator_category' is parsed as a non-type, but instantiation yields a type| 问题在那?*/#include <iostream>#include <string>#include <algorithm>#include <vector>#include <iterator>using namespace std;template <class C>typename iterator_traits<C>::difference_typeDist(C pos1, C pos2){        return Dist(pos1, pos2,                    iterator_traits<C>::iterator_category() );}template <class Raiterator>typename std::iterator_traits<Raiterator>::difference_typeDist(Raiterator pos1, Raiterator pos2,     random_access_iterator_tag)     {             return pos2 - pos1;     }int main(){        vector<int> v;        for (int i = 0; i != 10; ++i)                v.push_back(i);        //distance(v.begin(), v.end() );        cout << Dist(v.begin(), v.end() ) << endl;        //foo(v.begin(), v.end());}


[解决办法]
return Dist(pos1, pos2,
typename iterator_traits<C>::iterator_category() );
[解决办法]
两个 函数的顺序换一下,然后再加上typename ,ok了.
C/C++ code
#include <iostream>#include <string>#include <algorithm>#include <vector>#include <iterator>using namespace std;template <class Raiterator>typename std::iterator_traits<Raiterator>::difference_typeDist(Raiterator pos1, Raiterator pos2,     random_access_iterator_tag){    return pos2 - pos1;}template <class C>typename iterator_traits<C>::difference_typeDist(C pos1, C pos2){    return Dist(pos1, pos2,               typename  iterator_traits<C>::iterator_category());}int main(){    vector<int> v;    for(int i = 0; i != 10; ++i)        v.push_back(i);    //distance(v.begin(), v.end() );    cout << Dist(v.begin(), v.end()) << endl;    //foo(v.begin(), v.end());}
[解决办法]
探讨

引用:

两个 函数的顺序换一下,然后再加上typename ,ok了.
C/C++ code

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <iterator>

using namespace std;

template……
这和编译器 对函数的查找有关系?

[解决办法]
楼上正解

热点排行