наборы битов в C ++ с использованием VS2010 - PullRequest
3 голосов
/ 04 августа 2011

Я не могу понять, делаю ли я здесь что-то не так, надеюсь, кто-то здесь сможет меня просветить.

У меня есть класс Flags, это очень упрощенная версия, но я объявляю набор битов

class Flags
{
private:
    //List of 8 bits
    std::bitset<8> _P;
public:
    Flags();
}

В моем конструкторе я инициализирую его как

Flags::Flags()
    : _P(32ul)
{}

Но он не скомпилируется и выдает ошибку

Ошибка C2668: 'std:: bitset <_Bits> :: bitset ': неоднозначный вызов перегруженной функции

Это скомпилировано в VS2010 SP1 64 бит, но как 32-битная программа

EDIT

Принятый ответ для вышеупомянутого, но как примечание может кто-нибудь объяснить, почему при использовании конструктора по умолчанию (который должен инициализировать их все в нули), они не все установлены в нули?

_p.to_ulong()

возвращает 1390560944и _p выглядит как

[8](0,0,0,0,1,1,0,1)

1 Ответ

5 голосов
/ 04 августа 2011

Это ошибка в VC согласно http://connect.microsoft.com/VisualStudio/feedback/details/532897/problems-constructing-a-bitset-from-an-unsigned-long-in-the-vc-rc

Также обратите внимание, что идентификаторы, начинающиеся с _ и заглавной буквы, зарезервированы для реализации и запрещены для использования в вашей программе.

РЕДАКТИРОВАТЬ: Согласно странице обхода (если я правильно прочитал), обходной путь должен привести ваше значение к unsigned long long вместо unsigned long.

...