Почему лямбда не может вернуть объект класса, если у класса есть явные конструкторы? [Дубликат]

Я думаю, проблема в следующем коде -

radioButton1.Checked = bool.TryParse(temp[0], out tempBool);
radioButton2.Checked = bool.TryParse(temp[1], out tempBool);

bool.TryParse всегда будет возвращать true, если он сможет успешно разобрать первый параметр в значение bool. Что вам нужно сделать.

bool tempBool_1 = false, tempBool_2 = false;
if(bool.TryParse(temp[0], out tempBool_1))
{
      radioButton1.Checked = tempBool_1;
}
else
{
    // handle parsing error.
}
if(bool.TryParse(temp[0], out tempBool_2))
{
      radioButton2.Checked = bool.TryParse(temp[1], out tempBool_2);
}
else
{
    // handle parsing error.
}
1
задан jp jamieson 6 April 2019 в 20:42
поделиться

1 ответ

Прежде всего, просмотрите документацию по ключевому слову explicit .

Указывает, что конструктор или функция преобразования (начиная с C ++ 11) явные, то есть ее нельзя использовать для неявных преобразований и инициализации копирования.

По сути, явный конструктор копирования означает, что конструктор копирования не будет вызываться неявно.

Вам не нужно определять ваш конструктор копирования / перемещения, компилятор сгенерирует их для вас. То же самое для копирования / перемещения. Просто удалите их, и все будет в порядке.

class foo {
public:
    foo() = default;
    explicit foo(int val): _a(val) {}
    int a() const { return _a; }
    void a(int val) { _a = val; }
private:
    int _a{0};
};
0
ответ дан mohabouje 6 April 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: