关于直接基类

killgxlin 2007-12-11 10:21:16
对不住各位了,可能大家觉得很简单,可是我的脑袋已经很大了

#include <iostream>
#include <vector>
#include <utility>
using namespace std;

typedef unsigned long ulong;
typedef pair<ulong,ulong> aPair; //a room with its diversity

class aVal_Pair:public pair<ulong,aPair>{
public:
aVal_Pair(int a,const aPair &b):pair<int,aPair>(a,b){}
bool operator<(const aVal_Pair &p)const { return this->first>p.first;}
};

int main (void)
{
vector<aVal_Pair> vp;
vp.push_back(aVal_Pair(1,aPair(2,3)));
vp.push_back(aVal_Pair(5,aPair(1,5)));
vp.push_back(aVal_Pair(3,aPair(8,2)));
vp.push_back(aVal_Pair(6,aPair(1,4)));
vp.push_back(aVal_Pair(2,aPair(2,3)));
sort(vp.begin(),vp.end());
for (int i=0;i<5;i++)
cout<<vp[i].first<<" "<<vp[i].second.first<<endl;
return 0;
}



环境:MinGW Developer Studio
编译显示:
--------------------Configuration: my - Debug--------------------
Compiling source file(s)...
abc.cpp
abc.cpp: In constructor `aVal_Pair::aVal_Pair(int, const aPair&)':
abc.cpp:16: error: type `struct std::pair<int, aPair>' is not a direct base of
`aVal_Pair'

my.exe - 1 error(s), 0 warning(s)
...全文
140 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
luojingpo 2007-12-19
  • 打赏
  • 举报
回复
楼上的分析的比较对啊!楼主试一试楼上的方法看看!
飞哥 2007-12-19
  • 打赏
  • 举报
回复
由于此题为直接基类,需要将指定的pair<int,apair>与基类类型对应
aVal_Pair(int a,const aPair &b):pair<ulong,aPair>(a,b){}
如果你的子类中设置了数据,可以这样

class aVal_Pair:public pair<ulong,aPair>{
public:
aVal_Pair(int a,const aPair &b):c(a,b){}
bool operator<(const aVal_Pair &p)const { return this->first>p.first;}
pair<ulong,aPair> c;
};
tcxjia 2007-12-19
  • 打赏
  • 举报
回复
错误提示里面说的已经很清楚了,楼主,多分析,多测试
maxx 2007-12-19
  • 打赏
  • 举报
回复
把aVal_Pair(int a,const aPair &b):pair<int,aPair>(a,b){}
改成aVal_Pair(int a,const aPair &b):pair<ulong,aPair>(a,b){}就好了!!!

yydrewdrew 2007-12-19
  • 打赏
  • 举报
回复
#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

typedef unsigned long ulong;
typedef pair<ulong,ulong> aPair; //a room with its diversity

class aVal_Pair:public pair<ulong,aPair>{
public:
aVal_Pair(int a,const aPair &b):pair<ulong,aPair>(a,b){}
bool operator<(const aVal_Pair &p)const { return this->first>p.first;}
};

int main (void)
{
vector<aVal_Pair> vp;
vp.push_back(aVal_Pair(1,aPair(2,3)));
vp.push_back(aVal_Pair(5,aPair(1,5)));
vp.push_back(aVal_Pair(3,aPair(8,2)));
vp.push_back(aVal_Pair(6,aPair(1,4)));
vp.push_back(aVal_Pair(2,aPair(2,3)));
sort(vp.begin(),vp.end());
for (int i=0;i<5;i++)
cout<<vp[i].first<<" "<<vp[i].second.first<<endl;
return 0;
}

我猜是aVal_Pair(int a,const aPair &b):pair<int,aPair>(a,b){}吧
pair<int,aPair>不是aVal_Pair地基类呢怎么给它传参啊
jixingzhong 2007-12-19
  • 打赏
  • 举报
回复
要善于分析 ...
yupengchen951124 2007-12-19
  • 打赏
  • 举报
回复
我觉得他们的关系应该是has-a的关系,而不应该是is-a的关系(即通过public继承),
long000 2007-12-12
  • 打赏
  • 举报
回复
问题在这一句上aVal_Pair(int a,const aPair &b):pair<int,aPair>(a,b){}
你前边定义的是typedef pair<ulong,ulong> aPair;
在这怎么用pair<int,aPair>了?
这样是重载构造函数了,

64,674

社区成员

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

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