Typename in C++ Template

今天调一个程序,里面用到了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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值