我有一个名为Funcionario的类:
class Funcionario
{
public:
string nome;
int cpf;
void preencher(string nome, int cpf);
};
并且函数preencher的工作方式如下:
void Funcionario::preencher(string nome, int cpf)
{
this->nome = nome;
this->cpf = cpf;
}
在main函数上我声明了Funcionario func,当我直接用
设置名称和cpf时一切正常 cin >> Func.nome >> Func.cpf;
或者像这样调用函数:
string nome;
int cpf;
cin >> nome >> cpf;
Func.preencher(nome, cpf);
但我尝试以不同的方式做事,我遇到了问题。 而不是在Funcionario中声明函数preencher,我使用类型为Funcionario的参数声明了它之外的函数 然后设置" nome"和" cpf"函数中的值如下:
void preencher(Funcionario func)
{
cin >> func.nome;
cin >> func.cpf;
}
如果我尝试直接用
设置Func nome和cpfcin >> Func.cpf >> Func.nome;
它工作正常。 但是,如果我尝试像这样调用新的preencher函数
preencher(Func);
例如,nome = joao和cpf = 7842 当我打印名称我得到一个空字符串,当我打印int cpf我得到非常奇怪的值,如-1425739872或-1121695152。 为什么第一种方法在打印时工作正常(并分配值),但第二种方法不适用? 我很确定这是一个重复的问题,但我很难找到解决方案,但我无法做到。
答案 0 :(得分:2)
您需要通过引用为非成员案例传递func。您实际上是在设置本地'func'的成员,但这与调用函数中的实例无关。