Конвертирующий конструктор
От: Barbar1an Украина  
Дата: 28.05.18 09:52
Оценка:
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 г.
Отредактировано 28.05.2018 9:53 Barbar1an . Предыдущая версия . Еще …
Отредактировано 28.05.2018 9:53 Barbar1an . Предыдущая версия .
Re: Конвертирующий конструктор
От: watchmaker  
Дата: 28.05.18 10:01
Оценка: +1
Здравствуйте, Barbar1an, Вы писали:

B>что я забыл?

Или
void takeB(B b)
или
void takeB(B&& b)
или
void takeB(const B& b)


Ну и конструктор нужно сделать public.
Отредактировано 28.05.2018 10:03 watchmaker . Предыдущая версия .
Re: Конвертирующий конструктор
От: XuMuK Россия  
Дата: 28.05.18 10:08
Оценка:
Здравствуйте, 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>
Re[2]: Конвертирующий конструктор
От: Caracrist https://1pwd.org/
Дата: 29.05.18 08:17
Оценка:
чем

void takeB(B&& b)


поможет?
~~~~~
~lol~~
~~~ Single Password Solution
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.