ostream& operator<<(ostream& os, const coord& c);
объявлено, но вместо него определено
ostream& operator<<(ostream& os, coord& c)
, что делает его другой функцией.Обратите внимание на отсутствующие const
.Я бы проголосовал за закрытие как опечатку, если бы не
os << c.toString();
, для которой требуется coord::toString
, чтобы быть константной функцией, и, вероятно, причина того, что пропущенный const
отсутствует: const
-скомпилировано меньше версий, что заставляет спрашивающего думать, что это правильно.
Таким образом, в дополнение к
ostream& operator<<(ostream& os, const coord& c) // added const
{
os << c.toString();
return os;
}
коду также требуется
struct coord
{
int x;
int y;
int z;
string toString() const; // added const
};
и более поздняя реализация
string coord::toString() const // added const
{
ostringstream out;
out << "[" << x << ", " << y << ", " << z << "]";
return out.str();
}