Как получить доступ к переменным в классе, используя массив объектов? - PullRequest
0 голосов
/ 27 мая 2018

Я новичок в указателях, и у меня возникают проблемы с доступом к переменным внутри класса.

Я хочу создать своего рода базу данных возможных ходов в шахматной игре, и я думаю, что использование указателейпуть, так как я не буду тратить впустую память и предотвратить любые ненужные ошибки памяти.

main.cpp

#include <iostream>
#include "moves.h"

using namespace std;

int main()
{
    moves* possibleMoves[100];
    &(possibleMoves[0]->piece) = 100;
    cout << *&possibleMoves[0]->piece << endl;
    return 0;
}

move.h

#ifndef MOVES_H
#define MOVES_H


class moves
{
public:
    moves();
    int piece;
    int X;
    int Y;
    int addX;
    int addY;
    int score;
};

#endif // MOVES_H

Любая помощь будет оценена.Заранее большое спасибо.

В настоящее время ничего не выводится, и я не знаю, что делать.

Ответы [ 2 ]

0 голосов
/ 27 мая 2018

Вы создаете массив указателей с:

   moves* possibleMoves[100];

, когда вы хотите получить массив moves.

Затем вы пытаетесь присвоить piece in possibleMoves[0] значение 100 с:

   &(possibleMoves[0]->piece) = 100;

но вы на самом деле делаете что-то совсем другое.Как сказал @Henri Menke, лучше прочесть о &, *, . и ->.

Чтобы заставить задуманный код работать, попробуйте:

int main()
{
    moves possibleMoves[100];
    possibleMoves[0].piece = 100;
    cout << possibleMoves[0].piece << endl;
    return 0;
}

Здесьвы создаете массив из moves объектов, затем присваиваете значение piece в объекте 0 значение 100. Вы извлекаете это значение и печатаете его как cout.

0 голосов
/ 27 мая 2018

У меня проблемы с доступом к переменным внутри класса

Похоже, вы путаетесь с указателями и ссылками.

Нетреальная потребность в вашем коде использовать массив указателей.Вместо этого можно использовать обычный массив объектов.

moves possibleMoves[100];
possibleMoves[0].piece = 100;
cout << possibleMoves[0].piece << endl;

Кстати, класс moves неправильно выставляет все элементы данных для общего доступа - они должны быть закрытыми.И конструктор moves должен быть реализован или иначе должен быть удален, чтобы использовать конструктор по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...