ошибка: bool нельзя объявить со спецификатором 'explicit'

Когда я использую explicit с bool для преобразования параметра, я получаю эту ошибку:

ошибка C2178: «sdds::Ship::operator bool» не может быть объявлен со спецификатором «явный».

Моя цель с этой функцией состояла в том, чтобы использовать ее для преобразования оператора bool, который возвращает true, если объект действителен, и false в противном случае.

explicit Ship::operator bool() const
    {
        bool check = true;
        if (m_type == nullptr && strlen(m_type) == 0 && m_engines[0].get() > 0 && m_engCnt == 0)
        {
            check = false;
        }
        return check;
    }

Вот мой класс:

class Ship
    {
        Engine m_engines[10];
        char m_type[TYPE_MAX_SIZE];
        int m_engCnt;
... public:
explicit operator bool() const;
...

person Peter Tran    schedule 24.06.2020    source источник
comment
Попробуйте удалить ключевое слово explicit из определения и использовать его только в объявлении.   -  person Sam Varshavchik    schedule 24.06.2020


Ответы (1)


explicit нельзя было указать для определения функции-члена вне класса; его следует указывать только внутри определения класса.

Так удали как

Ship::operator bool() const
{
    bool check = true;
    if (m_type == nullptr && strlen(m_type) == 0 && m_engines[0].get() > 0 && m_engCnt == 0)
    {
        check = false;
    }
    return check;
}
person songyuanyao    schedule 24.06.2020