Box box = new Box(x+i,y); //error
Одна ошибка прямо здесь. Вы должны написать это как:
Box *box = new Box(x+i,y); //ok
Это потому, что когда вы используете new
, вы выделяете память, и только указатель может хранить память, поэтому box
должен быть указатель тип.
Аналогично,
Edge getBoxEdges() const {return boxEdges;} //error
должно быть записано как:
const Edge* getBoxEdges() const {return boxEdges;} //ok
Это потому, что boxEdges
является массивом, который может распадаться на тип указателя на свой первый элемент, и, поскольку это постоянная функция-член, boxEdges
будет распадаться на const Edge*
.
Кстати, вместо указатель в первом случае вы используете автоматический объект как:
Box box(x+i, y); //ok
Я бы посоветовал вам сделать второй параметр operator<<
константной ссылкой:
//std::ostream& operator<< (std::ostream& out, Box box); //don't use this
std::ostream& operator<< (std::ostream& out, Box const & box); //use this
Это позволяет избежать ненужного копирования!