2016-11-30 10 views
-1

どのようにして、sleepとusleepをヘッダファイルに実装しますか?これは私がこれまでに試したことであり、うまくいきません。私はまだC++に堪能ではありません。私はコメントアウトしてHTMLで似たようなことをすることが可能で、各ブラウザはそれに固有のコードを使用することが可能であることを知っています。sleepとusleepの使い分けはどちらを使うかを決めるクラスを作成することで実現します

これは私がして練習していたサンプルである:別のスレッドで

help.cpp

#include <iostream> 
#include "pause.h" 

using namespace std; 


int main() { 

pause p;  

cout << "Hello"; 

p.pause(5000) 

cout << " World"; 

} 

誰かがそれが窓との間で動作させるために#ifdefのの#else #endifのを使うことを提案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

コンストラクタ定義で 'void'リターンタイプを省略します。 –

+0

Re:「どのように私はsleepとusleepをヘッダファイルに実装するでしょうか?彼らはすでに実装されている、あなたは**それらを呼び出す**またはそれらを**使用する必要があります。 –

答えて

1

pauseはクラス名なので、コンパイラはpause関数(pause::pause)をコンストラクタとして扱います。

クラスの名前をPauseと変更してから、p.pauseと入力すると、有効な関数Pause::pauseが呼び出されます。

+0

コンストラクタを呼び出すだけで一時停止しないのはなぜですか? –

+0

ありがとう、私はそれをしたことを認識していませんでした。多分私は構造が台無しになったと思った。私はそれを1つのクラスにするべきか、それとも1つをifに、もう1つをelseにするべきかどうかは確かではありませんでした。後者が走っているようですが、今はHelloがWorldを待ってから印刷されます。 ¯\ _(ツ)_ /¯それは別のものではない場合は1つのことです。私はそれがプログラミングだと思います.... – AsylumOfMind

0

私は今、Windowsコンピュータの近くにいませんが、いくつかのクラス表記法を誤解しているようです。 なぜ引数なしでコンストラクタpause::pauseを実装しましたが、noneを呼び出しましたか?そして、なぜあなたはメンバーの関数pause::pauseを呼び出していませんでしたが、それは同じ名前であることは言うまでもありませんが、class pauseでありますか?あなたはそれらを混乱させました。

これを説明するために状況を簡略化して見てみましょう。 あなたが番号を印刷したい場合は、

TEST.CPPにより、クラスPrintNumberを設定します。これは行くだろう

#ifndef _PRINTNUM_ 
#define _PRINTNUM_ 

#include <iostream> 

class PrintNumber 
{ 
public: 
    explicit PrintNumber(){}; 
    ~PrintNumber(){}; 

    void printMe(unsigned num) { std::cout << num << "\n"; } 
}; 

#endif 

#include <iostream> 
#include "print-num.h" 

int main(void) 
{ 
    PrintNumber pr; 
    pr.printMe(5000); 
} 

印刷num.h。

印刷番号をSleep()に変更してもう一度お試しください。 クラスPauseには、コンストラクタPause::Pause(void)、メンバ関数Pause::sleepNow(unsigned)などを指定できます。

関連する問題