class A{};
class B
{
B(const A & a)
{
}
};
void takeB(B & b)
{
}
A getA()
{
return A();
}
int main()
{
takeB(getA()); //cannot convert argument 1 from 'A' to 'B &'
return 0;
}
что я забыл?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Здравствуйте, Barbar1an, Вы писали:
B>что я забыл?
Или
void takeB(B b)
или
void takeB(B&& b)
или
void takeB(const B& b)
Ну и конструктор нужно сделать
public.
Здравствуйте, Barbar1an, Вы писали:
B>что я забыл?
Внимательно прочитать сообщение компилятора и указать версию стандарта с++.
invalid initialization of non-const reference of type ‘B&’ from an rvalue of type ‘B’
Даже если явно сконструировать аргумент нужно типа:
takeB(B(getA()));
все равно будет ошибка, т.к. нельзя инициализировать неконстантную ссылку временными объектом.
Если нельзя менять интерфейс takeB, надо сконструировать объект B на стеке (ниже), также можно принимать в takeB копию, константную ссылку или rvalue reference, в зависимости от потребностей.
B>B>int main()
B>{
B> B b(getA());
B> takeB(b); //cannot convert argument 1 from 'A' to 'B &'
B> return 0;
B>}
B>