Частная переменная C++ Member, недоступная для функции Memeber

Я работаю над воссозданием pong, и при перемещении функции drawPaddle из основного класса Game в класс Paddle я столкнулся с проблемой, когда функция не может прочитать переменные-члены (даже если они находятся в одном классе). Класс находится в заголовочном файле, а определения функций — в файле cpp. Рассматриваемые переменные: высота, ширина, xPos и ​​yPos.

Весло класс

#include "Graphics.h"

class Paddle
{
public:
    void setX(int z)
    {
        xPos = z;
    }
    int getX()
    {
        return xPos;
    }
    void setY(int z)
    {
        yPos = z;
    }
    int getY()
    {
        return yPos;
    }
    int getWidth() {
        return width;
    }
    void setHeight(int z)
    {
        height = z;
    }
    int getHeight()
    {
        return height;
    }
    void setPlayer(bool z)
    {
        player = z;
    }
    bool getPlayer()
    {
        return player;
    }

private:
    //functions
    void drawPaddle(Graphics& gfx);
    void updatePaddle(Graphics& gfx);

    //variables
    int xPos;
    int yPos = Graphics::ScreenHeight / 2 - Paddle::height / 2;
    bool player;
    static constexpr int width = 20;
    int height = 100;
};

функция drawPaddle

#include "Paddle.h"
#include "Graphics.h"

void drawPaddle(Graphics gfx)
{
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < Paddle::height; j++)
        {
            gfx.PutPixel(p.getX() + i, p.getY() + j, Colors::White);
        }
    }
}

Как видите, я пытался получить к нему доступ с помощью необработанной переменной (сообщает мне, что переменная не определена), через класс (сообщает мне, что переменная недоступна) и с использованием для нее геттера (не удалось, потому что он должен ссылаться на конкретный экземпляр). Кто-нибудь знает, что я делаю неправильно? Спасибо.


person glonk    schedule 09.05.2020    source источник


Ответы (1)


В определении вы не указали, что drawPaddle является членом Paddle, поэтому оно рассматривало это определение как определение свободной функции, а не функции-члена. Бесплатные функции не будут иметь доступа к закрытым членам.

Он должен начинаться с void Paddle::drawPaddle(Graphics gfx)

person rsjaffe    schedule 09.05.2020