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()
此行试图调用 静态函数 getElapsedTime
。 sf::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
与浮点数进行比较。您必须调用 time1
的 asSeconds
成员,即 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));
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()
此行试图调用 静态函数 getElapsedTime
。 sf::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
与浮点数进行比较。您必须调用 time1
的 asSeconds
成员,即 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));