Я пытаюсь создать пользовательскую сеть class Tile
внутри другого class Board
, в котором хранится std::array<std::shared_ptr<Tile>, 34>
.Я использую std::shared_ptr<Tile>
объекты внутри class Tile
, чтобы показать, какие узлы подключены.Однако, когда я инициализирую каждый из 34 Tile
объектов, еще не инициализированные объекты, включенные в список, не обновляются с nullptr
до их собственной ссылки.
#include <memory>
#include <array>
#include <cstddef>
struct Tile;
template <const std::size_t N> using TileLink = std::array<const std::shared_ptr<const Tile>, N>;
template <const std::size_t N> using TileArray = std::array<std::shared_ptr<const Tile>, N>;
struct Tile {
/* surrounding tiles */
const std::size_t ID;
const std::size_t num_adj;
const TileLink<6> adjacent;
Tile (std::size_t id, std::size_t n, const TileLink<6> & arr) : ID (id), num_adj (n), adjacent (arr) { }
~Tile (void) = default;
};
class Board {
private:
TileArray<34> tiles;
public:
Board (void);
~Board (void) = default;
};
Board :: Board (void) {
/* Column 1 */
tiles[0] = std::make_shared<Tile> ( 0, 3, TileLink<6>{ tiles[1], tiles[4], tiles[5], nullptr, nullptr, nullptr });
tiles[1] = std::make_shared<Tile> ( 1, 4, TileLink<6>{ tiles[0], tiles[2], tiles[5], tiles[6], nullptr, nullptr });
tiles[2] = std::make_shared<Tile> ( 2, 3, TileLink<6>{ tiles[1], tiles[6], tiles[7], nullptr, nullptr, nullptr });
/* Column 2 */
tiles[3] = std::make_shared<Tile> ( 3, 2, TileLink<6>{ tiles[4], tiles[9], nullptr, nullptr, nullptr, nullptr });
tiles[4] = std::make_shared<Tile> ( 4, 5, TileLink<6>{ tiles[0], tiles[3], tiles[5], tiles[9], tiles[10], nullptr });
tiles[5] = std::make_shared<Tile> ( 5, 6, TileLink<6>{ tiles[0], tiles[1], tiles[4], tiles[6], tiles[10], tiles[11] });
tiles[6] = std::make_shared<Tile> ( 6, 6, TileLink<6>{ tiles[1], tiles[2], tiles[5], tiles[7], tiles[11], tiles[12] });
tiles[7] = std::make_shared<Tile> ( 7, 5, TileLink<6>{ tiles[2], tiles[6], tiles[8], tiles[12], tiles[13], nullptr });
tiles[8] = std::make_shared<Tile> ( 8, 2, TileLink<6>{ tiles[7], tiles[13], nullptr, nullptr, nullptr, nullptr });
/* Columns 4 - 6 */
...
...
...
/* Column 7 */
tiles[31] = std::make_shared<Tile> (31, 3, TileLink<6>{ tiles[26], tiles[27], tiles[32], nullptr, nullptr, nullptr });
tiles[32] = std::make_shared<Tile> (32, 4, TileLink<6>{ tiles[27], tiles[28], tiles[31], tiles[33], nullptr, nullptr });
tiles[33] = std::make_shared<Tile> (33, 3, TileLink<6>{ tiles[28], tiles[29], tiles[32], nullptr, nullptr, nullptr });
}
std::array
IЯ перехожу к конструктору Tile
не меняется.Как мне заставить его измениться?
Любая помощь будет принята с благодарностью.Извините за то, что я так долго задавал вопрос, я действительно не знал, как сделать этот пример меньше.