You should not create unreal classes with “new”. Use SpawnActor/NewObject/etc.
You also cannot transfer any parameters through constructor.
See this discussion: 4.7 How do I actually pass parameter's in the new constructor format? - C++ Gameplay Programming - Unreal Engine Forums
That’s because Constructor expects FObjectInitializer.
Also, you should really use UPROPERTY in your classes, otherwise people won’t be able to edit them through editor.
Unreal engine is not pure C++. The engine has garbage collection, for example, and there’s the whole UPROPERTY mechanism.
Check first person tutorial C++: A new, community-hosted Unreal Engine Wiki - Announcements and Releases - Unreal Engine Forums
Forget about passing stuff through constructor. Create an “init” method or something.
Frankly, I’d consider splitting weapon into two parts - UDataAsset-derived weapon information - that stores its characteristics, and probably something derived from USceneComponent that handles actual weapon model and shooting. Making weapon an AActor-derived class smells like Unity’s approach, I’m not sure if doing that in UE4 is a good idea (you could make it work though. See: Attach Actor to another Actor based on Socket points - UE4 AnswerHub) .
I advise to walk through first person shooter C++ tutorial. That should clear some things up.