2015-02-28 2 views
-1

У меня есть программа, которая должна рассчитывать от 10 до 0, и каждый раз, когда она подсчитывает, она должна ждать одну секунду, а затем вывести вывод с помощью cin.flush(). Профессор продемонстрировал это в классе, и он отлично работал, однако, когда я возвращаюсь домой, Xcode дает мне ошибку, говоря, что _sleep (1000) - это использование необъявленного идентификатора «_sleep» - который не должен быть так, как я импортировал специальные команды, и он должен использовать _sleep в компиляторах Windows.Почему _Sleep (1000) не компилируется в Xcode?

Короче говоря, это необходимо скомпилировать как в windows, так и в компиляторах Mac, которые я должен выполнять с помощью этих определений компилятора. Но по какой-то причине Xcode продолжает пытаться сказать мне, что это неправильно.

#ifdef GPP 
#include <unistd.h> 
#else 
#include <cstdlib> 
#endif 


int main() 
{ 
    for (int timer = 10; timer >= 0; timer--) 
    { 
     cout << timer; 
     cout.flush(); 

     //compiler functions 
     #ifdef GPP 
     Sleep(1); //One second to sleep on GPP compilers 
     #else 
     _sleep(1000);//On windows 1000ms sleep time 
     #endif 

     cout << '\r'; 
    } 
} 
+1

если вы используете Xcode, то скорее всего, вы не программируя на Windows, вы? поэтому, почему вы даже ожидаете, что функция, специфичная для Windows, будет работать? –

+0

Хорошо, мой учитель жаловался на совместимость на своем компьютере, и она использует ПК, поэтому я должен как-то включить это. –

+1

Даже если она жалуется, вы не сможете использовать функции Windows API на OS X. Их просто нет. –

ответ

0

Вы определили GPP в любом месте? если нет, то код будет использовать _sleep (1000), который является специфичным для Windows и не будет работать на Mac. он должен работать, если, например, составлен так:

g++ -DGPP 

Но вам все равно нужно изменить режим сна, чтобы спать, так как нет функции Sleep либо.

#ifdef GPP                  
#include <unistd.h>                
#else                   
#include <cstdlib>                
#endif                   
#include <iostream>                

using namespace std;                

int main()                  
{                    
    for (int timer = 10; timer >= 0; timer--)         
    {                   
     cout << timer;               
     cout.flush();               

     //compiler functions              
#ifdef GPP                  
     sleep(1); //One second to sleep on GPP compilers       
#else                   
     _sleep(1000);//On windows 1000ms sleep time        
#endif                   

     cout << '\r';               
    }                   
} 
2

Сон и варианты не переносимы, они специфичны для ОС. , поэтому мы используем стандарт:

std::this_thread::sleep_for (std::chrono::milliseconds(your time here)); 
Смежные вопросы