gcc 4.1 和 vcc 3.3 都失败了的编译,VS2010编译成功

hzhxxx 2011-09-09 09:40:26
例子在 gcc 4.1 和 gcc 3.3 上都编译失败,主要是
std::vector<const record_t> rrrr(SIZE);
std::sort(rrrr.begin(),rrrr.end(),compare_t<record_t,bool>(compare_rule));
这两句。下面按常规,贴代码


// c2011.cpp : 定义控制台应用程序的入口点。
//

//#include "stdafx.h"
#include <vector>
#include <map>
//#include <regex>
#include <algorithm>
#include <functional>
//#include <array>
#include <iostream>
#include <sstream>
using namespace std;

class record_t
{
private:
public:
int m_groupid;
double m_fee;
float m_price;
std::string m_name;
public:
record_t():m_name(""),m_fee(0),m_groupid(0),m_price(0)
{
//
}
record_t(const std::string &name,double fee,int groupid,float price)
:m_name(name),m_fee(fee),m_groupid(groupid),m_price(price)
{
//
}

//运算符operator <<重载,友元声明支持访问record_t的private变量
friend inline ostream &operator <<(ostream &os,const record_t &r)
{
cout<<"m_fee->"<<r.m_fee<<"##m_groupid->"
<<r.m_groupid<<"##m_name->"<<r.m_name
<<"m_price:"<<r.m_price<<endl;
return os;
}

const std::string getName() const
{
return m_name;
}

double getFee() const
{
return m_fee;
}

int getGroupId() const
{
return m_groupid;
}

void destroy()
{
delete this;
}
};

template<typename T,typename R> class compare_t: public std::unary_function<T,R>
{
private:
//比较规则
int m_rule;
public:
compare_t(int rule):m_rule(rule)
{
//
}

//支持T& 比较
//R operator()(T &t1,T &t2)
//{
//return compare(*&t1,*&t2);
//const_cast<int>(
//dynamic_cast<>
//}

//支持const T& 比较
R operator()(const T &t1,const T &t2)
{
return compare(t1,t2);
}

//支持T* 指针比较
//R operator()(T *t1,T *t2)
//{
//return compare(*t1,*t2);
//}

//支持const T* 指针比较
R operator()(const T *t1,const T *t2)
{
return compare(*t1,*t2);
}

//实现比较规则
R compare(const T &t1,const T &t2) const
{
R result = false;
switch(m_rule)
{
case 1:
{
result = t1.getName() < t2.getName()?true:false;
break;
}
case 2:
{
result = t1.getFee() < t2.getFee()?true:false;
break;
}
default:
{
result = (t1.getGroupId() > t2.getGroupId())?true:false;
break;
}
}
return result;
}
};

int main(int argc, char* argv[])
{
/*std::array<std::string,10> aa;
std::fill_n(aa.begin(),aa.size(),"aa");
std::string total = "";
//lambda 表达式[¶meter1,¶meter2,...](parameterlist)
std::for_each(aa.begin(),aa.end(),[&total](std::string &i){
total += (total.empty()?"":"#") + i;
});
std::cout<<total<<endl;
*/

//预先分配内存
const unsigned int SIZE = 10;
std::vector<record_t*> rr(SIZE);
for(size_t i = 0,j = SIZE;i < SIZE;++i,--j)
{
rr[i] = new record_t("AA",j,i,(float)i);
}

//指定比较规则
int compare_rule = 1;
compare_t<record_t,bool> comp = compare_t<record_t,bool>(compare_rule);
std::sort(rr.begin(),rr.end(),comp);
//简写
std::sort(rr.begin(),rr.end(),compare_t<record_t,bool>(compare_rule));
for(size_t i = 0;i < SIZE;++i)
{
std::cout<<(*rr[i])<<endl;
}

std::vector<record_t> rrr(SIZE);
std::sort(rrr.begin(),rrr.end(),compare_t<record_t,bool>(compare_rule));

std::vector<const record_t> rrrr(SIZE);
std::sort(rrrr.begin(),rrrr.end(),compare_t<record_t,bool>(compare_rule));

std::vector<const record_t*> rrrrr(SIZE);
std::copy(rr.begin(),rr.end(),rrrrr.begin());
std::sort(rrrrr.begin(),rrrrr.end(),compare_t<record_t,bool>(compare_rule));

//析构对象,释放内存
std::for_each(rr.begin(),rr.end(),std::mem_fun(&record_t::destroy));
rr.clear();

system("pause");

return 0;
}

...全文
218 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hzhxxx 2011-10-10
  • 打赏
  • 举报
回复


怎么没有人研究啊
赵4老师 2011-10-10
  • 打赏
  • 举报
回复
“语法糖”吃过吗?(^_^)
ri_aje 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用楼主 hzhxxx 的回复:]
例子在 gcc 4.1 和 gcc 3.3 上都编译失败,主要是
std::vector<const record_t> rrrr(SIZE);
[/Quote]
程序写成这样只能编译通不过。

C++03 23.1/3
The type of objects stored in these components must meet the requirements of CopyConstructible types (20.1.3), and the additional requirements of Assignable types.

Assignable 要求 t = u; 成立, where T is the type used to instantiate the container, t is a value of T, and u is a value of (possibly const) T。

const record_t 显然不满足容器要求,任何质量过关的 C++ 编译器都应该产生编译错误。
未日机甲 2011-10-10
  • 打赏
  • 举报
回复
对新的语言特性不感兴趣,俺开发都是用的几十年前的老语法,移植维护都方便
hzhxxx 2011-09-13
  • 打赏
  • 举报
回复


顶起,
hzhxxx 2011-09-09
  • 打赏
  • 举报
回复
[Quote=引用楼主 hzhxxx 的回复:]
例子在 gcc 4.1 和 gcc 3.3 上都编译失败,主要是
std::vector<const record_t> rrrr(SIZE);
std::sort(rrrr.begin(),rrrr.end(),compare_t<record_t,bool>(compare_rule));
这两句。下面按常规,贴代码


// c2011.cpp : 定义控制台应用程序的入口点。
……
[/Quote]


本意就是为了测试 vecotr<const record_t>
孤舟 2011-09-09
  • 打赏
  • 举报
回复
因为gcc 和 vcc 不支持呗 用某些比较特殊的模板 的话 请用VS GCC什么的对模板支持都不咋样
冻结 2011-09-09
  • 打赏
  • 举报
回复
std::vector<const record_t> rrrr(SIZE);

改成 std::vector<record_t> rrrr(SIZE);

然后用 const_iterator 访问。


试试吧,不确定。
第一章概述.......................................................................................................................................4 1.1 硬件配置...............................................................................................................................5 1.2 系统框图...............................................................................................................................6 1.3 软件系统...............................................................................................................................6 1.4 附件.......................................................................................................................................6 第二章 开发板快速使用指南............................................................................................................7 2.1 开发板布局图........................................................................................................................7 2.2 开发板后面板视图................................................................................................................8 2.3 开发板连接器管脚信号定义................................................................................................8 2.3.1 VGA ..............................................................................................................................8 2.3.2 串行接口.......................................................................................................................8 2.3.3 USB 接口......................................................................................................................9 2.3.4 PS/2 鼠标键盘接口......................................................................................................9 2.3.5 音频接口......................................................................................................................9 2.3.6 网口............................................................................................................................10 2.3.7 并行接口.................................................................................................................... 11 2.3.8 F_PANEL.................................................................................................................... 11 2.3.9 SATA 接口.................................................................................................................. 11 2.3.10 IDE 插槽...................................................................................................................12 2.3.11 ATX 电源..................................................................................................................12 2.4 开发板使用所需要的设备..................................................................................................12 2.5 开发板的使用步骤..............................................................................................................13 2.6 参考板串口的使用..............................................................................................................17 2.6.1 Windows 下设置超级终端.........................................................................................17 2.6.2 Linux 下minicom 设置..............................................................................................19 第三章 硬件.....................................................................................................................................21 3.1 主要IC 简介........................................................................................................................21 3.2 各硬件模块简介..................................................................................................................21 3.2.1 系统电源....................................................................................................................21 3.2.2 系统复位....................................................................................................................21 3.2.3 时钟模块&看门狗.....................................................................................................22 3.2.4 RTC............................................................................................................................22 3.2.5 BIOS ...........................................................................................................................22 3.2.6 内存接口....................................................................................................................22 3.2.7 以太网接口................................................................................................................22 3.2.8 显示模块....................................................................................................................22 3.2.9 音频系统....................................................................................................................22 3.2.10 USB2.0......................................................................................................................23 3.2.11 串口..........................................................................................................................23 3.3 资源分配.......................................................................................................................23 第四章 软件.....................................................................................................................................24 4.1 PMON 简介及使用..............................................................................................................24 4.1.1 PMON 简介................................................................................................................24 4.1.2 PMON 的使用............................................................................................................24 4.1.3 PMON 环境搭建和编译............................................................................................26 4.2 内核简介及其文件系统......................................................................................................27 4.2.1 内核简介....................................................................................................................27 4.2.2 内核编绎....................................................................................................................27 4.2.3 文件系统.....................................................................................................................28 附录Ⅰ 参考板常用应用软件配置..................................................................................................30

65,199

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧