如何在头文件中实现sleep和usleep。这是我到目前为止所尝试过的,它不起作用。我还不是很精通c ++。我知道通过注释可以在HTML中执行类似的操作,并且每个浏览器都使用特定于它的代码。
这是我练习的样本:
help.cpp
#include <iostream>
#include "pause.h"
using namespace std;
int main() {
pause p;
cout << "Hello";
p.pause(5000)
cout << " World";
}
另一个线程中有人建议使用#ifdef #else #endif让它在windows和linux / unix之间工作
pause.h
#ifdef _WIN32
#include <windows.h>
class pause
{
public:
void pause(unsigned milliseconds)
{
Sleep(milliseconds);
}
};
#else
#include <unistd.h>
class pause
{
public:
void pause(unsigned milliseconds)
{
usleep(milliseconds * 1000); // takes microseconds
}
};
#endif
不知怎的,我必须编写错误的类,因为运行我的.cpp文件它不能识别我尝试创建的类或对象。
错误
Running /home/ubuntu/workspace/help.cpp
In file included from /home/ubuntu/workspace/help.cpp:2:0:
/home/ubuntu/workspace/pause.h:20:41: error: return type specification for constructor invalid
void pause(unsigned milliseconds)
^
/home/ubuntu/workspace/help.cpp: In function ‘int main()’:
/home/ubuntu/workspace/help.cpp:9:7: error: expected ‘;’ before ‘p’
pause p;
^
/home/ubuntu/workspace/help.cpp:13:1: error: ‘p’ was not declared in this scope
p.pause(5000)
^
/home/ubuntu/workspace/help.cpp:15:1: error: expected ‘;’ before ‘cout’
cout << " World";
^
Process exited with code: 1
答案 0 :(得分:1)
您不能将成员函数与该类同名。 pause
是类名,因此编译器会将您的pause
函数(pause::pause
)视为构造函数。
您可以将该课程重命名为Pause
,然后p.pause
将调用有效的Pause::pause
函数。
答案 1 :(得分:0)
好吧,我现在不在Windows计算机附近,但似乎你误解了一些课堂表示法。
为什么用参数实现了构造函数pause::pause
,但是没有调用?你为什么称一个成员函数pause::pause
不在那里,更不用说它与class pause
的名字相同?你混淆了他们。
让我简化一下情况来说明这一点,让你看看。 如果要打印数字,请按
设置课程PrintNumber
TEST.CPP:
#include <iostream>
#include "print-num.h"
int main(void)
{
PrintNumber pr;
pr.printMe(5000);
}
打印num.h:
#ifndef _PRINTNUM_
#define _PRINTNUM_
#include <iostream>
class PrintNumber
{
public:
explicit PrintNumber(){};
~PrintNumber(){};
void printMe(unsigned num) { std::cout << num << "\n"; }
};
#endif
这将会发生。
用Sleep()
替换我的打印号码然后重试?
您可以使用构造函数Pause
和成员函数Pause::Pause(void)
命名类Pause::sleepNow(unsigned)
,或者类似。