2010-11-22 6 views
1

Je suis en train de compiler mon coup de pouce code simple:Boost erreur de compilation

#include <iostream> 
#include <boost/thread.hpp> 

void workerFunc(const char* msg, float delay_ms) 
{ 
boost::posix_time::milliseconds workTime(delay_ms); 

std::cout << "Worker: running, message = " << msg << std::endl; 

// Pretend to do something useful... 
boost::this_thread::sleep(workTime); 

std::cout << "Worker: finished" << std::endl; 
} 

int main(int argc, char* argv[]) 
{ 
std::cout << "main: startup" << std::endl; 

boost::thread workerThread(workerFunc, "Hello, Boost!", 2.5e3); 

std::cout << "main: waiting for thread" << std::endl; 

workerThread.join(); 

std::cout << "main: done" << std::endl; 

return 0; 
} 

en utilisant g ++ avec cette commande

g++ main.cpp -o main 

mais je reçois une erreur comme ceci:

main.cpp: In function `void workerFunc(const char*, float)': 
main.cpp:7: error: `boost::posix_time' has not been declared 
main.cpp:7: error: `milliseconds' was not declared in this scope 
main.cpp:7: error: expected `;' before "workTime" 
main.cpp:12: error: `boost::this_thread' has not been declared 
main.cpp:12: error: `workTime' was not declared in this scope 
main.cpp: In function `int main(int, char**)': 
main.cpp:21: error: no matching function for call to `boost::thread::thread(void (&)(const char*, float), const char[14], double)' 
/usr/include/boost/thread/thread.hpp:35: note: candidates are: boost::thread::thread(const boost::thread&) 
/usr/include/boost/thread/thread.hpp:38: note:     boost::thread::thread(const boost::function0<void, std::allocator<boost::function_base> >&) 
/usr/include/boost/thread/thread.hpp:37: note:     boost::thread::thread() 

Quel est le problème et comment dois-je le compiler ...?

+0

Est-ce que libboost-date-time-dev est installé? – 0xAX

+0

Comment le vérifier ...? Désolé pour mes questions stupides, mais je ne suis pas si familier avec linux ... – flyjohny

Répondre

0

Étant donné que le compilateur ne reconnaît pas certains types, cela signifie qu'il vous manque certains includes.

Pour posix_time, vous devez ajouter #include "boost/date_time/posix_time/posix_time.hpp" au-dessus de votre code.

7

Selon cette

http://www.boost.org/doc/libs/1_45_0/doc/html/date_time/posix_time.html

avez-vous besoin

#include "boost/date_time/posix_time/posix_time.hpp" 
+0

C'est cool, mais maintenant il donne "erreur:" boost :: this_thread "n'a pas été déclaré" ... – flyjohny

+0

Je vous ai donné le lien vers la documentation qui donne l'en-tête pour tout ce que vous utilisez. Si vous cherchez dedans, vous obtiendrez la réponse. –

+0

Selon ce http://www.boost.org/doc/libs/1_45_0/doc/html/thread/thread_management.html#thread.thread_management.this_thread je devrais inclure #include mais cela ne résout pas le problème ... :( – flyjohny

0

Vous devez inclure l'en-tête déclarant posix_time. Regardez le document boost pour voir de quoi il s'agit (vous pouvez essayer #include "boost/date_time/posix_time/posix_time_system.hpp" mais je ne suis pas sûr que ce serait suffisant).

1

Je suppose que vous avez installé une ancienne version de Boost dans votre système. Lire le fichier /usr/include/boost/version.hpp. Et selon la version dont vous disposez, consultez la documentation spécifique à la version (voir Boost Documentation). Ou installez la dernière version de Boost en utilisant la fonctionnalité d'empaquetage de votre système, si elle est disponible, ou en suivant manuellement les instructions d'installation (voir Getting Started on Unix Variants).