Здесь несколько проблем.
Прежде всего, чтобы реализовать связанный список (или очередь, которая использует связанный список) в C ++, вам нужно использовать указатели. В Java все является ссылкой. C ++, с другой стороны, проводит четкое различие между объектами и указателями на объекты. (Есть также ссылки на объекты, но они здесь неактуальны).
Давайте также на время забудем шаблоны, потому что они не являются частью проблемы.
class Box
{
int value;
Box nextBox; // wrong! should be a pointer
};
неверно, потому что nextBox
должен быть указателем на следующий элемент списка / очереди. Правильный
путь будет Box *nextBox;
К тому же токену setNext()
следует также взять указатель на Box
в качестве аргумента. setNext(Box b)
является примером передачи по значению, т.е. е. эта функция-член (метод в языке Java) получает свою собственную копию всего объекта Box. Это может привести к проблемам с производительностью, если объект большой, не говоря уже о том, что любые изменения, внесенные в него функцией, будут невидимы для вызывающей стороны. Вместо этого здесь требуется передача по ссылке, которая выполняется с помощью указателя.
И, наконец, new
в C ++ всегда возвращает указатель. Вы должны иметь Box<int> *newBox = new Box<int>;