error: cannot call member function 'sf::Time sf::Clock::getElapsedTime() const' without object

error: cannot call member function 'sf::Time sf::Clock::getElapsedTime() const' without object

 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
    }

returns: 错误: 无法调用没有对象的成员函数 'sf::Time sf::Clock::getElapsedTime() const' 并且:错误:'clock' 不是 class、命名空间或枚举 sfml 和 c++ 的新手,如果这是一个愚蠢的问题,我们深表歉意。

Clock Clock();

让我们将您的 sf::Clock 实例称为与 class 名称不同的名称,例如 clock。虽然这不是错误,但可能会造成混淆。

Clock clock();

另外,请注意,这一行对于编译器来说可能是模棱两可的,因为它看起来像一个名为 clock 的函数原型,它没有参数,returns 一个 sf::Clock 实例.只需删除括号。

Clock clock;

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

t1这个功能没有用到,可以删除。


Time time1 = Clock::getElapsedTime()

此行试图调用 静态函数 getElapsedTimesf::Clock class 没有这样命名的静态函数,只有一个 成员函数 。此调用以及 while 循环之后的调用是您描述的编译器错误的原因。

Time time1 = Clock.getElapsedTime()

还是不行。请注意行尾缺少的 ;

Time time1 = Clock.getElapsedTime();

while (time1 << 0.16666666);

您在这里使用了运算符<<,即"bitwise left shift"运算符。你的意思是 "less than" 运算符(<),但是因为你想检查是否经过了特定的时间量,所以你应该使用 "greater than" 运算符(> ).

while (time1 > 0.16666666);

但这仍然行不通,因为 time1 是一个 sf::Time 瞬间,您不能将 sf::Time 与浮点数进行比较。您必须调用 time1asSeconds 成员,即 returns 已用时间(以秒为单位)作为浮点数。

while (time1.asSeconds() > 0.16666666);

更重要的是,你在行尾放一个;,这意味着while循环体是空的,它将永远运行(如果 time1 不大于 0.16666666)。你必须删除末尾的分号,如果循环,你的下一行将成为正文。

while (time1.asSeconds() > 0.16666666)

time1 = clock::getElapsedTime();

此行将 time1 的值替换为 getElapsedTime 的结果。你的意思是加上经过的时间到time1,你可以通过将=替换为+=来实现。

time1 += Clock::getElapsedTime();

上面这行还有两个错误。和以前一样,sf::Clock 没有名为 getElapsedTime 的静态函数,而且 clock 不存在于您的代码中(只是 Clock 大写 C) .

time1 += Clock.getElapsedTime();

我在这里假设,您希望使用此 while 循环等待特定的时间过去。为此,您可以使用 sf::sleep 函数。

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