关闭

Typename in C++ Template

431人阅读 评论(0) 收藏 举报

今天调一个程序,里面用到了vector,在GDB里面看vector里面的东西一点也不直接,如果碰到vector<vector<int> >,要想看看里面的内容就更不爽了。也可能是我不知道有什么好办法,如果谁知道,麻烦告诉我一下。

没有办法,只要弄个Dump函数来看:

template <class T>
void DumpArrayArray(vector<vector<T> >& arr)
{
    cout<< "Dumping Data:" << endl;
    vector< vector<T> >::iterator outIter = arr.begin();
     for (; outIter!= arr.end(); outIter++)
     {

         vector<T>::iterator inIter = (*outIter).begin();
         for (;inIter!=(*outIter).end();inIter++){
             cout << *inIter << "t";
         }
         cout << endl;
     }
}

猜猜GCC报什么错来着,其实我估计Visual Studio也会报一样的错,编译错哦:

clsAggregateGroups.cpp:In function ‘void DumpArrayArray(std::vector<std::vector<T, std::allocator<_CharT> >, std::allocator<std::vector<T, std::allocator<_CharT> > > >&)’:

clsAggregateGroups.cpp:38: error: expected `;’ before ‘outIter’

见鬼,我明明定义了vector<vector<T> >::iterator outIter的啊,后来我让开林帮我看看,他一离开座位,我就想起来了,这是typename的问题。当我们使用类型推导的时候 vector<vector<T> >::iterator , C++编译器没有办法肯定这个iterator是类型呢,还是变量?所以需要程序员明确的告诉编译器,以前我看STL源码解析的时候看到过的。

所以我应该改成:typename vector<vector<T> >::iterator outIter; 这样编译就过了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:79875次
    • 积分:1453
    • 等级:
    • 排名:千里之外
    • 原创:60篇
    • 转载:0篇
    • 译文:8篇
    • 评论:16条
    最新评论