读书人

expected initializer before #039;lt;#039; tok

发布时间: 2012-04-04 16:38:51 作者: rapoo

expected initializer before '<' token

C/C++ code
我用的是codeblocks// expected initializer before '<' token  下面这句编译出错了,不知道为什么?    // 定义类型别名    typedef std::vector<typename T::value_type>  VecType;//这道题是要传进迭代器,T应该就会实例化成为迭代器类型,为什么还可以这样子使用T::value_type呢?//迭代器里面也有value_type这个定义,value_type不是在容器里面的吗?》#include <iostream>#include <memory>#include <string>#include <algorithm>//using namespace std;template <typename T >typename T::value_type MostFreq( T first, T last ){    // 计算需分配内存的大小    std::size_t amount = 0;    T start = first;    while ( start != last )    {        amount++;        start++;    }    // 定义类型别名    typedef std::vector<typename T::value_type>  VecType;    // 创建vector对象,用于保存输入序列的副本    VecType vec(amount);    VecType::iterator newFirst = vec.begin();    VecType::iterator newLast = vec.end();    // 将输入序列复制到vector对象    std::uninitialized_copy( first, last, newFirst );    std::sort ( newFirst, newLast );  // 对副本序列排序,使得相同的值出现在相邻位置    std::size_t maxOccu = 0, occu = 0; // 出现最频繁的次数,当前值的出现次数    VecType::iterator preIter = newFirst; //指向当前值的前一个值    VecType::iterator maxOccuElement = newFirst; // 指向当前出现最频繁的值    while( newFirst != newLast )    {        if ( *newFirst != *preIter )  // 当前值与前一值不同        {            if ( occu > maxOccu )         // 当前值的出现次数为目前最大次数            {                maxOccu = occu;             // 修改最大次数                maxOccuElement = preIter;     // 修改指向当前出现最频繁的值的迭代器            }            occu = 0;        }        ++occu;        preIter = newFirst;        ++newFirst;    }    // 最后一个值的出现次数与目前的最大次数进行比较    if ( occu > maxOccu )    {        maxOccu = occu;        maxOccuElement = preIter;    }    return *maxOccuElement;}int main () {  return 0;}


[解决办法]
C/C++ code
#include <iostream>#include <memory>#include <string>#include <algorithm>#include<vector>//using namespace std;template <typename T >typename T::value_type MostFreq( T first, T last ){    // 计算需分配内存的大小    std::size_t amount = 0;    T start = first;    while ( start != last )    {        amount++;        start++;    }    // 定义类型别名    typedef std::vector<typename T::value_type>  VecType;    // 创建vector对象,用于保存输入序列的副本    VecType vec(amount);    typename VecType::iterator newFirst = vec.begin();    typename VecType::iterator newLast = vec.end();    // 将输入序列复制到vector对象    std::uninitialized_copy( first, last, newFirst );    std::sort ( newFirst, newLast );  // 对副本序列排序,使得相同的值出现在相邻位置    std::size_t maxOccu = 0, occu = 0; // 出现最频繁的次数,当前值的出现次数    typename VecType::iterator preIter = newFirst; //指向当前值的前一个值    typename VecType::iterator maxOccuElement = newFirst; // 指向当前出现最频繁的值    while( newFirst != newLast )    {        if ( *newFirst != *preIter )  // 当前值与前一值不同        {            if ( occu > maxOccu )         // 当前值的出现次数为目前最大次数            {                maxOccu = occu;             // 修改最大次数                maxOccuElement = preIter;     // 修改指向当前出现最频繁的值的迭代器            }            occu = 0;        }        ++occu;        preIter = newFirst;        ++newFirst;    }    // 最后一个值的出现次数与目前的最大次数进行比较    if ( occu > maxOccu )    {        maxOccu = occu;        maxOccuElement = preIter;    }    return *maxOccuElement;}int main () {  return 0;}
[解决办法]
typename VecType::iterator newFirst = vec.begin();
typename VecType::iterator newLast = vec.end();
typename VecType::iterator preIter = newFirst; //指向当前值的前一个值
typename VecType::iterator maxOccuElement = newFirst;
------解决方案--------------------


template <class Category, class T, class Distance = ptrdiff_t,
class Pointer = T*, class Reference = T&>
struct iterator {
typedef T value_type;
typedef Distance difference_type;
typedef Pointer pointer;
typedef Reference reference;
typedef Category iterator_category;
};

读书人网 >C++

热点推荐