Проблемы с компиляцией заголовочного файла в VC++

Я только что реорганизовал код для проекта, и теперь я получаю ошибки, которые не могу устранить. Этот заголовок включается в файл .cpp, который пытается скомпилировать.

#include "WinMain.h"
#include "numDefs.h"
#include <bitset>

class Entity
{
public:
    Entity();
    virtual ~Entity();

    virtual bitset<MAX_SPRITE_PIXELS> getBitMask();
    virtual void getMapSection(float x, float y, int w, int h, bitset<MAX_SPRITE_PIXELS>* section);
};

Я получаю эти ошибки компилятора для объявления Entity::getBitMask():

ошибка C2143: синтаксическая ошибка: отсутствует ';' до '<'

ошибка C2433: «Entity::bitset»: «виртуальный» не разрешен в объявлениях данных

ошибка C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает default-int.

ошибка C2238: неожиданный токен(ы) перед ';'

Для следующей строки есть и другие подобные ошибки. Кажется, что битсет не включается, но это явно так? Я не могу понять, что происходит не так. WinMain.h включает windows.h, а numDefs.h ничего не включает.

С помощью MS Visual C++ 2008.


person Tony R    schedule 22.06.2009    source источник
comment
Что такое MAX_SPRITE_PIXELS и где он определяется?   -  person Colin Desmond    schedule 22.06.2009
comment
MAX_SPRITE_PIXELS определяется в numDefs.h   -  person Tony R    schedule 23.06.2009


Ответы (4)


Объявите набор битов как std::bitset<MAX_SPRITE_PIXELS>.

person MSN    schedule 22.06.2009

Шаблон bitset определен в пространстве имен std::, поэтому вам либо нужно сослаться на него по его полному имени std::bitset или добавьте using namespace std; где-нибудь перед объявлением класса.

person sth    schedule 22.06.2009
comment
добавить с использованием пространства имен std; где-то, но не в заголовочном файле - person TimW; 22.06.2009
comment
Где лучше всего это сделать? Я использую только одно пространство имен, поэтому я должен просто использовать пространство имен std; до #includes во всех моих файлах cpp? - person Tony R; 23.06.2009
comment
Как вы это делали до сих пор? Я бы рекомендовал просто писать префикс std:: когда вы используете что-то из стандартной библиотеки. В противном случае вы получите множество вещей с очень распространенными именами (например, копия) в вашем глобальном пространстве имен, о которых вы даже не знаете. Это может привести к удивительным эффектам. В противном случае, вероятно, лучше использовать полные имена в заголовках и использовать пространство имен std; в верхней части вашего .cpps, после #includes. - person sth; 23.06.2009

Я думаю, вам нужно сказать std::bitset.

person Eric H.    schedule 22.06.2009

Похоже на ошибку в "numDefs.h"

person Martin York    schedule 22.06.2009