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; 这样编译就过了。

阅读更多
个人分类: C++
上一篇const char* const 问题
下一篇C++异常处理的三个境界
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭