error: constructor undefined with TSharedRef [update: bug? ]

I’m following the Strategy Game example project, and it uses code very similar to mine. I could define a generic Constructor, but the example class has no constructors and uses Construct() instead, is there something I’m overlooking here?

I’ve narrowed it down to this line in the header:
TSharedRef menuStyle;

Everything works fine with that line commented out, Now am I using TSharedRef incorrectly or is this a bug?

Error Output

1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): warning C4510: 'SMainMenuWidget' : default constructor could not be generated
1>          C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(9) : see declaration of 'SMainMenuWidget'
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): error C4610: class 'SMainMenuWidget' can never be instantiated - user defined constructor required
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): warning C4510: 'SMainMenuWidget' : default constructor could not be generated
1>          C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(9) : see declaration of 'SMainMenuWidget'
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): error C4610: class 'SMainMenuWidget' can never be instantiated - user defined constructor required
1>  MainMenuHUD.cpp
1>  MainMenuWidget.cpp
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): warning C4510: 'SMainMenuWidget' : default constructor could not be generated
1>          C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(9) : see declaration of 'SMainMenuWidget'
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): error C4610: class 'SMainMenuWidget' can never be instantiated - user defined constructor required
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): warning C4510: 'SMainMenuWidget' : default constructor could not be generated
1>          C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(9) : see declaration of 'SMainMenuWidget'
1>C:\Users\owner\Documents\Unreal Projects\Manipulators\Source\Manipulators\Public/UI/MainMenuWidget.h(29): error C4610: class 'SMainMenuWidget' can never be instantiated - user defined constructor required

MainMenuWidget.h

#pragma once

#include "MainMenuHUD.h"
#include "SlateBasics.h"
#include "SlateExtras.h"

class SMainMenuWidget : public SCompoundWidget 
{

public:
	SLATE_BEGIN_ARGS(SMainMenuWidget) :_OwnerHUD()
	{}
	SLATE_ARGUMENT(TWeakObjectPtr<class AMainMenuHUD>, OwnerHUD)
	SLATE_END_ARGS()

	void Construct(const FArguments& InArgs);

private:
	TWeakObjectPtr<class AMainMenuHUD> OwnerHUD;
	float xPaddingSubTitles;
	TSharedRef <FSlateStyleSet> menuStyle;
	

public:
	virtual void Tick(const FGeometry& allotedGeometry, const double inCurrentTime, const float inDeltaTime) override;
	virtual FReply OnFocusReceived(const FGeometry& aGeometry, const FFocusEvent& inFocusEvent) override;
	virtual bool SupportsKeyboardFocus() const override { return true; }
};

MainMenuWidget.cpp

#include "Manipulators.h"
#include "Public/UI/MainMenuWidget.h"
#include "SlateGameResources.h"


void SMainMenuWidget::Construct(const FArguments& InArgs)
{
	TSharedRef<FSlateGameResources> styleResources = FSlateGameResources::New(FName("ManipulatorsStyle"), "/Game/Content/UI/Styles", "/Game/Content/UI/Styles");
	FSlateStyleRegistry::RegisterSlateStyle(styleResources.Get());
	
	xPaddingSubTitles = 20.f;
	OwnerHUD = InArgs._OwnerHUD;


	
	ChildSlot 
		.VAlign(EVerticalAlignment::VAlign_Fill)
		.HAlign(EHorizontalAlignment::HAlign_Fill)
		[
			
			SNew(SOverlay)
			
			+ SOverlay::Slot()
				.VAlign(EVerticalAlignment::VAlign_Fill)
				.HAlign(EHorizontalAlignment::HAlign_Fill)
				[
					SNew(SColorBlock)
					.Color(FLinearColor::Black)
				]
				    			
			+ SOverlay::Slot()
				.VAlign(EVerticalAlignment::VAlign_Center)
				.HAlign(EHorizontalAlignment::HAlign_Center)
				[
					SNew(SVerticalBox)
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Fill)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Center)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(STextBlock)
							.ColorAndOpacity(FSlateColor(FLinearColor::White))
							.Text(FText::FromString("START"))
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Fill)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(SSpacer)
							.Size(FVector2D(2.f,44.f))
							.Visibility(EVisibility::Hidden)
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Fill)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(SColorBlock)
							.Size(FVector2D(550.f, 1.5f))
							.Color(FLinearColor::White)
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Fill)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(SSpacer)
							.Size(FVector2D(2.f, 40.f))
							.Visibility(EVisibility::Hidden)
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Center)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(STextBlock)
							
							.Text(FText::FromString("NEW"))
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Center)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(STextBlock)
							
							.Text(FText::FromString("LOAD"))
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Center)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(STextBlock)
							
							.Text(FText::FromString("SETTINGS"))
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Fill)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(SSpacer)
							.Size(FVector2D(2.f, xPaddingSubTitles))
							.Visibility(EVisibility::Hidden)
						]
					+ SVerticalBox::Slot()
						.VAlign(EVerticalAlignment::VAlign_Center)
						.HAlign(EHorizontalAlignment::HAlign_Center)
						.AutoHeight()
						[
							SNew(STextBlock)    							
							.Text(FText::FromString("EXIT"))
						]
				]
		];
		
}

FReply SMainMenuWidget::OnFocusReceived(const FGeometry& aGeometry, const FFocusEvent& inFocusEvent)
{
	return FReply::Handled().LockMouseToWidget(SharedThis(this));
}

void SMainMenuWidget::Tick(const FGeometry& alottedGeometry, const double inCurrentTime, const float inDeltaTime)
{
	SCompoundWidget::Tick(alottedGeometry, inCurrentTime, inDeltaTime);
}

Hi,

TSharedRef cannot be null,never. Therefore you must initialize it at least with empty value in regular class constructor.

So if you add to your class constructor that looks like this:

SMainMenuWidget() : menuStyle(new FSlateStyleSet(FName()))
	{}

You should be ready to go. For more on shared references and pointers check out the documentation

Cheers