[英]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
}
返回:错误:无法在没有对象的情况下调用成员函数 'sf::Time sf::Clock::getElapsedTime() const' 并且:错误:'clock' 不是类、命名空间或枚举 sfml 和 C++ 的新成员,所以很抱歉这是一个愚蠢的问题。
Clock Clock();
让我们将您的sf::Clock
实例称为与该类名称不同的名称,例如clock
。 虽然这不是错误,但可能会令人困惑。
Clock clock();
另外,请注意,这一行对于编译器来说可能不明确,因为它看起来像一个名为clock
的函数原型,它没有参数并返回一个sf::Clock
实例。 只需删除括号。
Clock clock;
sf::Time t1 = seconds(0.1f);
t1
在这个函数中没有用到,可以删除。
Time time1 = Clock::getElapsedTime()
这一行试图调用静态函数getElapsedTime
。 sf::Clock
类没有这样命名的静态函数,只有一个成员函数。 此调用以及while
循环之后的调用是您描述的编译器错误的原因。
Time time1 = Clock.getElapsedTime()
它仍然不好。 注意缺少的;
在行尾。
Time time1 = Clock.getElapsedTime();
while (time1 << 0.16666666);
您在这里使用了运算符<<
,即“按位左移”运算符。 您的意思是“小于”运算符 ( <
),但是因为您想检查是否经过了特定的时间量,所以应该使用“大于”运算符 ( >
)。
while (time1 > 0.16666666);
但这仍然行不通,因为time1
是sf::Time
瞬间,您不能将sf::Time
与浮点数进行比较。 您必须调用time1
的asSeconds
成员,它将以秒为单位的经过时间作为浮点数返回。
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));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.