This is a pure virtual method (=0) which is not supposed to change the data of the class (const). You should provide an implementation in one of the classes deriving from Weapon! See this: Difference between a virtual function and a pure virtual function
You are expected to derive from the Weapon (can be considered interface) concrete classes, such as Axe , Shotgun, etc … where you will provide the attack() method.