ошибка: невозможно вызвать функцию-член 'sf :: Time sf :: Clock :: getElapsedTime () const' без объекта - PullRequest
1 голос
/ 02 февраля 2020
 void update(bool moright, bool moleft)
    {
        Clock Clock();
        if (moright == true){
            xvel = 5;
            }
        if (moleft == true){
            xvel = -5;
        }
        if (!(moright || moleft)){
            xvel = 0;
        }
        sf::Time t1 = seconds(0.1f);
        Time time1 = Clock::getElapsedTime() // error 1 here
        while (time1 << 0.16666666);
            time1 = clock::getElapsedTime(); // error 2 here
    }

возвращает: ошибка: невозможно вызвать функцию-член 'sf :: Time sf :: Clock :: getElapsedTime () const' без объекта и: error: 'clock' не является классом, пространством имен или перечислением sfml и c ++, поэтому извиняюсь, если это глупый вопрос.

1 Ответ

2 голосов
/ 02 февраля 2020
Clock Clock();

Давайте просто назовем ваш sf::Clock экземпляр чем-то, что отличается от имени этого класса, например clock. Хотя это не ошибка, это может сбивать с толку.

Clock clock();

Кроме того, обратите внимание, что эта строка может быть неоднозначной для компилятора, поскольку она выглядит как прототип функции с именем clock, который не аргумент и возвращает sf::Clock экземпляр. Просто удалите разделы.

Clock clock;

sf::Time t1 = seconds(0.1f);

t1 не используется в этой функции, может быть удалено.


Time time1 = Clock::getElapsedTime()

Эта строка пытается для вызова функции stati c getElapsedTime. Класс sf::Clock не имеет функции с именем stati c, названной так, просто функция-член . Этот вызов и тот, что после while l oop, являются причиной описанных вами ошибок компилятора.

Time time1 = Clock.getElapsedTime()

Это все еще не хорошо. Обратите внимание на пропущенный ; в конце строки.

Time time1 = Clock.getElapsedTime();

while (time1 << 0.16666666);

Здесь вы использовали оператор <<, то есть оператор «сдвиг влево». Вы имели в виду оператор «меньше чем» (<), но поскольку вы хотите проверить, истек ли определенный период времени c, вам следует использовать оператор «больше чем» (>).

while (time1 > 0.16666666);

Но это все равно не сработает, потому что time1 - это момент sf::Time, и вы не можете сравнить sf::Time с плавающей точкой. Вы должны вызвать asSeconds член time1, который возвращает затраченное время в секундах как число с плавающей точкой.

while (time1.asSeconds() > 0.16666666);

Еще одна важная вещь, вы положили ; в конце строки, это означает, что while l oop имеет пустое тело и будет работать вечно (если time1 не больше 0.16666666). Вы должны удалить точку с запятой в конце, и ваша следующая строка станет телом, если l oop.

while (time1.asSeconds() > 0.16666666)

time1 = clock::getElapsedTime();

Эта строка заменяет значение time1 на результат getElapsedTime. Вы имели в виду добавление истекшего времени к time1, вы можете добиться этого, заменив = на +=.

time1 += Clock::getElapsedTime();

В строке выше все еще содержатся еще два ошибки. Как и раньше, sf::Clock не имеет функции stati c, называемой getElapsedTime, плюс clock не существует в вашем коде (просто Clock с большой буквы C).

time1 += Clock.getElapsedTime();

Я предполагаю, что вы хотели подождать определенное количество времени c, с этим while l oop. Для этого вы можете использовать функцию sf::sleep.

sf::sleep(sf::seconds(0.16666666f));
...