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);
}