Невозможно связать неконстантную ссылку Lvalue с Rvalue: решение.
В данном фрагменте кода произошла ошибка при инициализации объекта класса Foo внутри конструктора класса Bar. Сообщение об ошибке указывает, что неконстантная ссылка lvalue (Foo f) привязана к rvalue (результат вызова genValue()).
В C неконстантные ссылочные параметры могут ссылаться только на именованные переменные (lvalues). Однако результатом genValue() является временное значение (rvalue). Чтобы решить эту проблему, нам нужно передать значение genValue() по значению (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;
}
};
Изменив аргумент конструктора на int, мы теперь можем инициализировать объект Foo в области конструктора без каких-либо ошибок.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3