独自クラスの作成について

下記のように独自クラスを作るという書き方をして、その後、testクラスの中のx変数をブループリントに公開して操作したいのですが、エラーばかり出てしまい、出来ません。
そもそも、このような書き方は間違っているのでしょうか?


//UCLASS()をつけたいが、
// Error: Invalid class name 'test'. The class name must have an appropriate prefix added (A for Actors, U for other classes).が発生してしまう。
class MYPROJECT_API test
{
public:
	test();
	~test();
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
	int x;
	UFUNCTION(BlueprintCallable, Category = "Simulation")
	void run();
};
UCLASS(Blueprintable , BlueprintType)
class AMyGameMode : public AGameModeBase
{
	GENERATED_BODY()
public:
	AMyGameMode();
	virtual void BeginPlay() override;
	virtual void Tick(float DeltaTime) override;
	//UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")をつけたいが
	// Unrecognized type 'test' - type must be a UCLASS, USTRUCT or UENUM が発生してしまう
	test s;
	// 問題なし
	UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
	int32 aa;
};

まずはエラー内容で指摘されている内容を満たすべきかと思います
エラー文を和訳しておきますので参考にしてください

エラー:無効なクラス名'test'。クラス名は適切なプレフィックスを付ける必要があります(ActorならA、その他のクラスならU)

ありがとうございます。
一応、できるようになりました。
ちょっと触ってて追加で質問したいことができましたが、それは別の質問スレで行いたいと思います。


UCLASS()
class MYPROJECT_API Utest : public UObject
{
    GENERATED_BODY()
public:
    Utest();
    ~Utest();
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    int x;
    UFUNCTION(BlueprintCallable, Category = "Simulation")
    void run();
};
UCLASS(Blueprintable , BlueprintType)
class AMyGameMode : public AGameModeBase
{
    GENERATED_BODY()
public:
    AMyGameMode();
    virtual void BeginPlay() override;
    virtual void Tick(float DeltaTime) override;
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    Utest *s;
    UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Simulation")
    int32 aa;
};