Boost 1.44.0 + VS2010 Ошибка частного участника - PullRequest
1 голос
/ 21 октября 2010

У меня есть объявление класса в Utils.h:

    class Utils {
 private:
     static boost::mutex outputMutex;
    };

В файле cpp:

boost::mutex Utils::outputMutex = boost::mutex();

Я получаю:

Error 1 error C2248: 'boost::mutex::mutex' : cannot access private member declared in class 'boost::mutex'

Если мызаглянуть внутрь boost/thread/win32/mutex.hpp мы увидим:

namespace boost
{   
    class mutex:
        public ::boost::detail::underlying_mutex
    {

    // ...       

    public:
        mutex()
        {
            initialize();
        }

Кто-нибудь знает, что мне здесь не хватает?Раньше он компилировался на другой машине с VS2008.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 21 октября 2010

То, что у вас есть, является инициализацией копирования и эквивалентно:

boost::mutex Utils::outputMutex(boost::mutex());

, который вызывает конструктор копирования.Однако mutex не может быть скопировано.Просто дайте ему построить по умолчанию:

boost::mutex Utils::outputMutex;
2 голосов
/ 21 октября 2010

Файл .cpp должен быть:

boost::mutex Utils::outputMutex;

Нет необходимости в назначении.Он будет построен соответствующим образом.

0 голосов
/ 21 октября 2010

Похоже, вы объявляете Utils::outputMutex дважды, один раз в объявлении класса, а затем снова в .cpp.Также второму объявлению присваивается «возвращаемое значение» конструктора, что невозможно.Что произойдет, если вы удалите второе объявление?

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