读书人

c++ primer 中的有关问题

发布时间: 2012-04-18 15:01:59 作者: rapoo

c++ primer 中的问题!
#include <iostream>
#include <utility>

using namespace std;

int main()
{
pair< int ,int > p={3,2};
return 0;
}


以上程序不能通过编译。
既然pair的两个数据成员都是public的,为什么不能直接使用以上方法进行赋值?

[解决办法]
pair<int,int>整体是一个类型,{2,3}这个花括号里面是2个变量,等于用2给pair<int,int>赋值,因2与pair<int,int>类型不同,因此不能赋值
[解决办法]
虽然pair里面的是public的,但pair<int,int>整体是一种类型,struct中的变量,是int、char或double类型的,你如果在struct中加一个pair<int,int>类型的变量,就不能用{23,ad...}这些来赋值了。
比如:struct s{int a,char b,pair<int,int>}={2,'a',make_pair<3,4>}这样可以赋值,
但如果改成:struct s{int a,char b,pair<int,int>={2,'a',(3,4)}就不能赋值了
[解决办法]
lz再仔细看看这一页的上面第二句:
对于没有定义构造函数 并且 其全体数据成员均为public的类,可以采用与初始化数组元素相同的方式初始化其成员。
注意这里的“没有定义构造函数”!
而pair定义了构造函数你是知道的,所以compile error

读书人网 >C++

热点推荐