[Warning] left shift count >= wid <- pomocy

0

Witam.

Mam serwer gry, gdzie mam atrybuty:

	protected:
		enum itemAttrTypes
		{
			ATTR_ITEM_ACTIONID = 1 << 0,
			ATTR_ITEM_UNIQUEID = 1 << 1,
			ATTR_ITEM_DESC = 1 << 2 ,
			ATTR_ITEM_TEXT = 1 << 3,
			ATTR_ITEM_WRITTENDATE = 1 << 4,
			ATTR_ITEM_WRITTENBY = 1 << 5,

			// basic item modifiers
			ATTR_ITEM_NAME = 1 << 6,
			ATTR_ITEM_PLURALNAME = 1 << 7,
			ATTR_ITEM_ATTACK = 1 << 8,
			ATTR_ITEM_HEALTH = 1 << 25,
			ATTR_ITEM_MANA = 1 << 26,
			ATTR_ITEM_HEALTHP = 1 << 27,
			ATTR_ITEM_MANAP = 1 << 28,
			ATTR_ITEM_PHYSICALDAMAGE = 1 << 29,
			ATTR_ITEM_ENERGYDAMAGE = 1 << 30,
			ATTR_ITEM_EARTHDAMAGE = 1 << 31,
			ATTR_ITEM_FIREDAMAGE = 1 << 32,
			ATTR_ITEM_UNDEFINEDDAMAGE = 1 << 33,
			ATTR_ITEM_LIFEDRAIN = 1 << 34,
			ATTR_ITEM_MANADRAIN = 1 << 35,
			ATTR_ITEM_HEALING = 1 << 36,
			ATTR_ITEM_DROWNDAMAGE = 1 << 37,
			ATTR_ITEM_ICEDAMAGE = 1 << 38,
			ATTR_ITEM_HOLYDAMAGE = 1 << 39,
			ATTR_ITEM_DEATHDAMAGE = 1 << 40,
			ATTR_ITEM_EXTRAATTACK = 1 << 9,
			ATTR_ITEM_DEFENSE = 1 << 10,
			ATTR_ITEM_EXTRADEFENSE = 1 << 11,
			ATTR_ITEM_ARMOR = 1 << 12,
			ATTR_ITEM_HITCHANCE = 1 << 13,
			ATTR_ITEM_SHOOTRANGE = 1 << 14,
			ATTR_ITEM_SCRIPTPROTECTED = 1 << 15,

			// compatibility with previous versions
			ATTR_ITEM_OWNER = 1 << 16,
			ATTR_ITEM_DURATION = 1 << 17,
			ATTR_ITEM_DECAYING = 1 << 18,
			ATTR_ITEM_CORPSEOWNER = 1 << 19,
			ATTR_ITEM_CHARGES = 1 << 20,
			ATTR_ITEM_FLUIDTYPE = 1 << 21,
			ATTR_ITEM_DOORID = 1 << 22,

			// advanced item modifiers
			ATTR_ITEM_ARTICLE = 1 << 23,
			ATTR_ITEM_ATTACKSPEED = 1 << 24
		};

Problem w tym, że gdy pododawałem swoje, to powyżej 31 wyskakuje błąd:
[Warning] left shift count >= width of type

Co to konkretnie oznacza? Jak to naprawić?

Pozdrawiam.

0

Oznacza to tyle, że próbujesz zrobić shift o więcej bitów, niż wynosi szerokość inta na twojej architekturze... Tu chyba enum nic nie da, trzeba brzydko zrobić stałymi jakiegoś 64bit typu.

0

Źle się za to zabierasz. W C++ można zdefiniować pola bitowe, ale nie pamiętam jak była tego składnia (coś z dwukropkiem wewnątrz opisu struktury).

Jeśli dobrze pamiętam to wyglądało by to tak:

struct itemAttrTypes
                {
                        unsigned short ATTR_ITEM_ACTIONID:1;
                        unsigned short ATTR_ITEM_UNIQUEID:1;
                        unsigned short ATTR_ITEM_DESC:1;,
                        unsigned short ATTR_ITEM_TEXT:1;
                        unsigned short ATTR_ITEM_WRITTENDATE:1;
                        unsigned short ATTR_ITEM_WRITTENBY:1;

                        // basic item modifiers
                        unsigned short ATTR_ITEM_NAME:1;,
                        unsigned short ATTR_ITEM_PLURALNAME:1;
                        ...
                };

Oczywiście należy poprawić naming convention.

1 użytkowników online, w tym zalogowanych: 0, gości: 1