Não é possível vincular referência de Lvalue não const a Rvalue: uma resolução
O trecho de código fornecido encontrou um erro ao inicializar um objeto da classe Foo dentro do construtor da classe Bar. A mensagem de erro indica que uma referência de lvalue não const (Foo f) está sendo vinculada a um rvalue (o resultado da chamada de genValue()).
Em C , parâmetros de referência não const só podem se referir a nomeados variáveis (lvalores). No entanto, o resultado de genValue() é um valor temporário (rvalue). Para resolver esse problema, precisamos passar o valor de genValue() por valor (int).
class Foo {
public:
Foo(int x) {
this->x = x;
}
private:
int x;
};
class Bar {
public:
Bar(): f(genValue()) {
}
private:
Foo f;
int genValue() {
int x;
// do something ...
x = 1;
return x;
}
};
Ao alterar o argumento do construtor para int, agora podemos inicializar o objeto Foo dentro do escopo do construtor sem erros.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3