Ошибка компиляции Boost / thread / locks.hpp (85) (отсутствует скобка) VS2010 - PullRequest
0 голосов
/ 13 октября 2011

Я пытаюсь использовать boost :: thread, но не могу скомпилировать из-за ошибки компиляции locks.hpp. Я использую Boost 1.47.0 от BoostPro (предварительно скомпилированный для Windows). (Я кодировал много лет, и я только что наткнулся на один из тех ударов, который поставил меня в тупик.)

Добавление следующего кода в мой код приводит к ошибке:

#include "boost/thread.hpp"

Ошибка: </p> <pre><code>1>boost/thread/locks.hpp(85): error C2958: the left parenthesis '(' found at 'boost\thread\locks.hpp(85)' was not matched correctly 1> boost/thread/locks.hpp(91) : see reference to class template instantiation 'boost::detail::has_member_lock<T,true>' being compiled 1>boost/thread/locks.hpp(85): error C2988: unrecognizable template declaration/definition 1>boost/thread/locks.hpp(85): error C2059: syntax error : '<end Parse>' 1>boost/thread/locks.hpp(85): error C2238: unexpected token(s) preceding ';' 1>boost/thread/locks.hpp(109): error C2958: the left parenthesis '(' found at 'boost\thread\locks.hpp(109)' was not matched correctly 1> boost/thread/locks.hpp(115) : see reference to class template instantiation 'boost::detail::has_member_unlock<T,true>' being compiled 1>boost/thread/locks.hpp(109): error C2988: unrecognizable template declaration/definition 1>boost/thread/locks.hpp(109): error C2059: syntax error : '<end Parse>' 1>boost/thread/locks.hpp(109): error C2238: unexpected token(s) preceding ';'

Строки 84 и 85 из locks.hpp:

    template< typename U,typename V>
    static true_type has_member(V (U::*)());

Строки 108 и 109 из locks.hpp:

    template<typename U,typename V>
    static true_type has_member(V (U::*)());

Я искал определения препроцессора для маскировки кода, но ничего (пока) не работает.

Так что, похоже, '*' доставляет компилятору некоторые проблемы.

Любые предложения / помощь высоко ценится

1 Ответ

1 голос
/ 13 октября 2011

То, что включено в файл locks.hpp, определяет V как макрос. Непосредственно перед включением locks.hpp добавьте #undef V. Однако это не решение, решение состоит в том, чтобы найти, кто такой плохой игрок, определить макрос с именем V (по крайней мере, все прописные буквы ) и удалить его. Если применимо, возможно, даже подайте отчет об ошибке в такой библиотеке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...