这是我的编码:
#include<iostream>
#include<string>
using std::endl;
using std::cin;
using std::cout;
using std::string;
using std::istream;
struct worker
{
worker()=default;
worker(istream &f);
int data;
};
int main()
{
worker a;
cout<<a.data<<endl;
system("Pause");
return 0;
}
worker::worker(istream&f)
{
read(f,*this);
}
istream&read(istream &f,worker&student)
{
f>>student.data
return f;
}
但是当我调试时,它警告我,我还没有初始化a
的元素。我知道我需要通过worker(istream &f)
输入数据,但我不知道如何调用构造函数来初始化a.data
。
答案 0 :(得分:3)
但是当我调试时,它警告我我没有初始化
输入数据a
的元素。我知道我需要通过worker(istream &f)
你意识到警告确实是一个问题,这很好。从语法的角度来看,这是一个警告,但从语义的角度来看,这是一个错误。
我知道部分没有根据。您意识到需要初始化a.data
,但您的做法存在缺陷。
但我不知道如何调用构造函数来引入
a.data
。
首先,你不能在已经构造的对象上调用构造函数。构造函数仅用于构造对象,而不是在已构造的对象上再次调用。
其次,使用不同的策略初始化对象。完全删除构造函数worker(istream&)
。在已构造的对象上使用read
,例如:
int main()
{
worker a;
read(std::cin, a);
std::cout << a.data << std::endl;
return 0;
}
进一步完善。
而不是read
,请使用operator>>
。
std::istream& operator>>(std::istream& f, worker& w)
{
f >> w.data;
return f;
}
然后,您可以使用:
int main()
{
worker a;
std::cin >> a;
std::cout << a.data << std::endl;
return 0;
}