带参调用构造函数,为什么有时出错,有些地方又正常编译? 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()没问题呢? 展开
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()没问题呢? 展开
1个回答
展开全部
g函数返回类型是A;
主函数里面可以这样A exam=g(); //所以没问题
f函数里面的A(b),类没有这种初始化的,只能A 对象名=A(b);
如果前面加上A rhs=A(b);这样就可以了。
满意请采纳!
主函数里面可以这样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)只能作为中间对象,不能孤立存在
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询