Что значит «не может преобразовать» этот указатель из «const hand» в «hand &»? (C ++) - PullRequest
4 голосов
/ 30 мая 2009

Ошибка возникает при попытке сделать это

friend std::ostream& operator<<(std::ostream& os, const hand& obj)
{
    return obj.show(os, obj);
}

где hand - это класс, который я создал, а show -

std::ostream& hand::show(std::ostream& os, const hand& obj)
{
    return os<<obj.display[0]<<obj.display[1]<<obj.display[2]<<obj.display[3]<<obj.display[4];
}

, где дисплей объявлен как char display[6].

Кто-нибудь знает, что означает ошибка?

Ответы [ 2 ]

9 голосов
/ 30 мая 2009

Вам нужно сделать hand::show(...) метод const; и не имеет смысла передавать ему ссылку на объект - он уже получает это как указатель 'this'.

Это должно работать:

class hand {
public:
  std::ostream& show(std::ostream &os) const;
...
};

friend std::ostream& operator<<(std::ostream& os, const hand& obj)
{
    return obj.show(os);
}
2 голосов
/ 30 мая 2009

Вам нужно, чтобы сама функция также была const (обратите внимание на «const» в конце первой строки):

std::ostream& hand::show(std::ostream& os, const hand& obj) const
{
    return os<<obj.display[0]<<obj.display[1]<<obj.display[2]<<obj.display[3]<<obj.display[4];
}
...