Ошибка: ожидаемый инициализатор перед '.' знак - PullRequest
0 голосов
/ 29 апреля 2011

Я довольно плохо знаком с использованием классов и объектно-ориентированной стороны C ++ и получаю сообщение об ошибке в заголовке.

Я пишу игру в тетрис с использованием SDL.

У меня есть определение класса в shape.h

class shape
{
public:
    SDL_Surface *colour;
    int rotation1[4][4];
    int rotation2[4][4];
    int rotation3[4][4];
    int rotation4[4][4];

    bool load();
    void move();

    shape();
};

и в main.h я включил shape.h и определил экземпляры класса с помощью

//Create shapes
shape O, T, S, L, R, Z, I;

У меня также есть отдельные файлы для каждой фигуры, например I.cpp, поскольку каждая фигура будет иметь разный код для загрузки изображения для его цвета блока в цвет SDL_Surface и для различных массивов различных поворотов блока, поэтому я разделил это в один файл для каждого блока.

В I.cpp я включил main.h и попытался настроить функцию загрузки для I следующим образом:

bool I.load()
{
    //if loading the cyan square texture fails
    if ((I.colour = surface::onLoad("../Textures/cyanSquare.png")) == NULL)
    {
        //print error
        cout << "Unable to load cyanSquare.png";
        //return fail
        return false;
    }

    I.rotation1 = {{7,7,7,7},
                   {0,0,0,0},
                   {0,0,0,0},
                   {0,0,0,0}};
    I.rotation2 = {{0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0}};
    I.rotation3 = {{7,7,7,7},
                   {0,0,0,0},
                   {0,0,0,0},
                   {0,0,0,0}};
    I.rotation4 = {{0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0},
                   {0,0,7,0}};

    return true;
}

Когда я пытаюсь скомпилировать это (используя GCC), он сообщает об ошибке в строке 3 I.cpp:

error: expected initializer before '.' token

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

Ответы [ 2 ]

4 голосов
/ 29 апреля 2011

Это недопустимо в C ++.I - переменная;Вы не можете определить функцию-член для определенной переменной (bool I.load()).Возможно, вы имели в виду bool shape::load()?

2 голосов
/ 29 апреля 2011
bool I.load()

не должно быть bool shape::load()?

Я - просто экземпляр типа «форма». Как вы можете использовать «I» внутри реализации функции, поскольку она ничего не знает об экземпляре «I»!

Вы, вероятно, хотите сделать это: 1. Добавьте конструкцию с параметром, чтобы указать изображение для экземпляра:

class shape
{
public:
//....

    shape(const char* pImagePath);
private:
    const char* m_pImagePath;
};

и реализовать конструктор как:

shape::shape(const char* image_path) : m_pImagePath(pImagePath) {}

Ваш load () может быть реализован как:

bool shape::load()
{
    //if loading the cyan square texture fails
    if ((colour = surface::onLoad(m_pImagePath)) == NULL)
    {
        cout << "Unable to load cyanSquare.png";
        return false;
    }

    rotation1 = {{7,7,7,7},
                 {0,0,0,0},
                 {0,0,0,0},
                 {0,0,0,0}};
    rotation2 = {{0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0}};
    rotation3 = {{7,7,7,7},
                 {0,0,0,0},
                 {0,0,0,0},
                 {0,0,0,0}};
    rotation4 = {{0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0},
                 {0,0,7,0}};

    return true;
}

Создать экземпляр «I» следующим образом:

shape I("../Textures/cyanSquare.png");
...