正在使用该变量而未进行初始化

时间:2015-06-12 17:16:05

标签: c++ visual-c++

我尝试使用友元功能,但在将对象作为参数传递给函数时面临一些问题

#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 ;
} 

错误:运行时错误

2 个答案:

答案 0 :(得分:4)

base的(编译器生成的)默认构造函数不初始化数据成员。因此,在使用变量val1和val2之前,不要将它们初始化。

程序的行为未定义。你的编译器特别有帮助。

一个简单的补救措施是提供默认构造函数,使用基本成员初始化来初始化val1和val2。

答案 1 :(得分:0)

您没有定义默认构造函数。所以编译器自己定义它。当您使用自动存储持续时间(如

)定义类的对象时,它不会初始化数据成员
base obj;

但是,如果要按以下方式定义对象,则可以对数据memebrs进行值初始化:)

base obj = base();

在这种情况下,val1val2将等于0.

或者你可以在对象的定义之后调用它的成员函数get

base obj;

obj.get();