带参调用构造函数,为什么有时出错,有些地方又正常编译? 80

#include<iostream>classA{public:A(int&a){++a;std::cout<<"ais"<<a;}private:A(){}};intb... #include <iostream>

class A{
public:
A(int & a){++a;std::cout<<"a is "<<a;}
private:
A(){}
};

int b=0;
void f(){
A(b);//报错:A::A()为私有
}

//g()和h()又都没问题
A g(){
return A(b);
}

void h(){
A obj(b);
}

int main(){
return 0;
}

f()、g()、h()看起来都应该是调用A::A(int & a)函数,为什么f()报错,而g()和h()没问题呢?
展开
 我来答
帐号已注销
2013-10-19 · TA获得超过301个赞
知道小有建树答主
回答量:223
采纳率:0%
帮助的人:207万
展开全部
g函数返回类型是A;

主函数里面可以这样A exam=g(); //所以没问题
f函数里面的A(b),类没有这种初始化的,只能A 对象名=A(b);
如果前面加上A rhs=A(b);这样就可以了。
满意请采纳!
追问
三个函数都只是想调用A::A(int & a)从而修改并打印b的值。假如“类没有这种初始化的”这个说法成立,那么为什么报错和A::A()有关;为什么g(),h()都没问题;为什么f()改成
void f(){
(void) A(b);
}
也不会报错了……
追答
A(b)只能作为中间对象,不能孤立存在
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式