Ошибка при компиляции - PullRequest
       2

Ошибка при компиляции

1 голос
/ 22 ноября 2010

Я пытаюсь скомпилировать свой простой буст-код:

#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;
}

с использованием g ++ с этой командой

g++ main.cpp -o main

но я получаю ошибку вроде этого:

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()

Что не так и как мне его скомпилировать ...?

Ответы [ 4 ]

7 голосов
/ 22 ноября 2010

Согласно этому

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

Вам нужно это

#include "boost/date_time/posix_time/posix_time.hpp"
1 голос
/ 22 ноября 2010

Я подозреваю, что в вашей системе установлена ​​старая версия Boost.Прочитайте файл /usr/include/boost/version.hpp.И в зависимости от того, какая у вас версия, обратитесь к документации по конкретной версии (см. Boost Documentation ).Или установите последнюю версию Boost, используя функции упаковки вашей системы, если они доступны, или вручную, следуя указаниям по установке (см. Начало работы с вариантами Unix ).

0 голосов
/ 22 ноября 2010

Вы должны включить заголовок, объявляющий posix_time.Посмотрите на документацию Boost, чтобы увидеть, какой это (вы можете попробовать #include "boost/date_time/posix_time/posix_time_system.hpp", но я не уверен, что этого будет достаточно).

0 голосов
/ 22 ноября 2010

Поскольку компилятор не распознает какой-либо тип, это означает, что вы пропускаете некоторые включения.

Для posix_time вам необходимо добавить #include "boost/date_time/posix_time/posix_time.hpp" поверх вашего кода.

...