我尝试使用友元功能,但在将对象作为参数传递给函数时面临一些问题
#include<iostream>
using namespace std;
class base
{
int val1,val2;
public:
//base(){}
void get()
{
cout<<"Enter two values:";
cin>>val1>>val2;
}
friend int mean(base ob);
};
int mean(base ob)
{
return (ob.val1+ob.val2)/2;
}
int main()
{
base obj;
cout<<"\n Mean value is : "<<mean(obj);
system("pause");
return 0 ;
}
错误:运行时错误
答案 0 :(得分:4)
base的(编译器生成的)默认构造函数不初始化数据成员。因此,在使用变量val1和val2之前,不要将它们初始化。
程序的行为未定义。你的编译器特别有帮助。
一个简单的补救措施是提供默认构造函数,使用基本成员初始化来初始化val1和val2。
答案 1 :(得分:0)
您没有定义默认构造函数。所以编译器自己定义它。当您使用自动存储持续时间(如
)定义类的对象时,它不会初始化数据成员base obj;
但是,如果要按以下方式定义对象,则可以对数据memebrs进行值初始化:)
base obj = base();
在这种情况下,val1
和val2
将等于0.
或者你可以在对象的定义之后调用它的成员函数get
base obj;
obj.get();