USoundBase is a single base class that represents a sound that can be played, which is inherited from by USoundWave and USoundCue. So if you already have a pointer to a sound wave then you can pass that to the SetSound function no problem.
No your StartMusic is fine as an AudioComponent, you can think of a USoundBase/Wave/Cue as the original data for a sound and an AudioComponent is a single instance of that sound being played. So using the static constructor helper you’ve set up you can get a pointer to the sound wave from Sound->Object;.
Most of time you would probably store this pointer in your class though, that way you can keep hold of it and use it outside of the constructor. You can either set it on your AudioComponent or use UGameplayStatics::PlaySoundAttached to start it off and create a new audio component at the same time. You can also use UGameplayStatics::PlaySoundAtLocation to start off a sound that you never need to update again (not advised for anything long or looping but good for short effects etc.).
You need to include SoundCue.h in SixDOFPawn.cpp I would imagine. The error suggests that it is only aware of a forward declaration for USoundCue, it doesn’t know that it inherits from USoundBase.
Weird, I never got an e-mail that you replied. Anyhow, yes, this was the problem, I was using the Flying C++ project as a template and I needed to include Engine.h instead of EngineMinimal.h in the main .h file for the project. At least now I know where to look if I see weirdness like this again. Thank you Matt!