| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 514 人关注过本帖
标题:跟编译器有关?
取消只看楼主 加入收藏
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
结帖率:94.87%
收藏
已结贴  问题点数:5 回复次数:1 
跟编译器有关?
程序代码:
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<iterator>    
using namespace std;
template <typename T>typename T::value_type mostFre(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;
VecType vec(amount);
VecType::iterator newFirst=vec.begin();
VecType::iterator newlLast=vec.end();
std::uninitialized_copy(first,last,newFirst);
std::sort(newFirst,newlLast);
std::size_t maxOccu=0,occu=0;
VecType::iterator preIter=newFirst;
VecType::iterator maxOccuElmIt=newFirst;
while(newFirst!=newLast){
    if(*newFirst!=*preIter){
        if(occu>maxOccu){
            maxOccu=occu;
            maxOccuElmIt=preIter;
        }
        occu=0;
    }++occu;
    preIter=newFirst;
++newFirst;
}

if(occu>maxOccu){
    maxOccu=occu;
    maxOccuElmIt=preIter;
}
return *maxOccuElmIt;

}
int main(){
        int ia[]={
                1 ,2,3, 4, 5, 1,2,3,1,7
        };
        vector<int>ve(ia,ia+10);
        vector<int>::iterator a=ve.begin(),b=ve.end();
        cout<<mostFre(a,b)<<endl;
        return 0;
}


这段代码在vc++6.0上编译出现了 error 2893,目测是因为编译器问题,
同时在cfree上编译也无法通过,

vc++6.0的编译错误信息:
--------------------Configuration: Cpp1 - Win32 Debug--------------------
Compiling...
1.cpp
D:\我的文档\新建文件夹\1.cpp(7) : error C2893: Failed to specialize function template 'generic-type-257 __cdecl mostFre(T,T)'
        With the following template arguments:
        'int *'
D:\我的文档\新建文件夹\1.cpp(7) : error C2146: syntax error : missing ';' before identifier 'mostFre'
D:\我的文档\新建文件夹\1.cpp(7) : error C2065: 'T' : undeclared identifier
D:\我的文档\新建文件夹\1.cpp(7) : error C2146: syntax error : missing ')' before identifier 'first'
D:\我的文档\新建文件夹\1.cpp(7) : error C2059: syntax error : ')'
执行 cl.exe 时出错.

1.obj - 1 error(s), 0 warning(s)


求老鸟指点看看,,遇到这样的问题很是蛋疼啊,
搜索更多相关主题的帖子: 编译器 
2013-05-29 20:40
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:0 
自己已经解决问题了,,
确实是被习题答案误导了

例如
VecType::iterator newFirst=vec.begin();

编译器无法得知 iterator 是一个数据成员还是类型成员
所以 需要

typename VecType::iterator newFirst=vec.begin();
来告诉编译器将成员当做类型。


我好棒
2013-05-29 22:04
快速回复:跟编译器有关?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022330 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved