C++ 虚幻引擎4.18.2“;“类”不存在默认构造函数;UUserWidget“&引用;

C++ 虚幻引擎4.18.2“;“类”不存在默认构造函数;UUserWidget“&引用;,c++,constructor,widget,unreal-engine4,C++,Constructor,Widget,Unreal Engine4,我在编写UUserWidget继承类的构造函数时遇到了一个奇怪的问题。该问题仅在该类中出现(在其他几个类中检查)。代码: 尝试将其添加到基类(UUserWidget)中: 这是因为这个类没有默认构造函数。默认构造函数是不带参数的构造函数。尝试将其添加到基类(UUserWidget)中: 这是因为这个类没有默认构造函数。默认构造函数是不带参数的构造函数。添加默认构造函数“UUserWidget();”添加默认构造函数“UUserWidget();”有时您的类应该是可默认构造的:似乎不起作用-相同的

我在编写UUserWidget继承类的构造函数时遇到了一个奇怪的问题。该问题仅在该类中出现(在其他几个类中检查)。代码:
尝试将其添加到基类(UUserWidget)中:


这是因为这个类没有默认构造函数。默认构造函数是不带参数的构造函数。

尝试将其添加到基类(UUserWidget)中:



这是因为这个类没有默认构造函数。默认构造函数是不带参数的构造函数。

添加默认构造函数“UUserWidget();”

添加默认构造函数“UUserWidget();”

有时您的类应该是可
默认构造的
:似乎不起作用-相同的结果您会得到编译器错误吗?不太清楚你这里有什么问题。也许你可以告诉我们编译器在喊什么。哦,对不起-只是忘了附上这张图片有时你的类应该是
DefaultConstructible
:似乎不起作用-同样的结果你会得到编译器错误吗?不太清楚你这里有什么问题。也许你可以告诉我们编译器在喊什么。哦,对不起,只是忘了附上这张图片。它已经是一个构造函数
UUserWidget(const FObjectInitializer&ObjectInitializer)为什么它可能不是默认构造函数?因为默认构造函数不接受任何参数,所以UUserWidget(const FObjectInitializer&ObjectInitializer);不能是默认构造函数。你确定吗?我几乎可以肯定这就是导致你的问题的原因。。。您的UUserWidget类应该是:public:UUserWidget();然后是UUserWidget(constfobjectInitializer和ObjectInitializer);您遇到了一个链接错误,大多数链接错误都是由于错误地包含了类引起的,这与构造函数无关。@Sheim这更多的是一个特定的虚幻引擎问题。您不希望向引擎添加代码(如前所述)。本质上的区别是,如果您以Actor为例,它有一个默认的()构造函数。而UUserWidget没有。因此,您只需确保使用FObjectInitializer构造函数即可。我们应该做同样的工作。也许这是在允许空构造函数的升级过程中对虚幻引擎的疏忽
MyWidget::MyWidget(const FObjectInitializer&ObjectInitializer):UUserWidget(ObjectInitializer){
已经有一个构造函数
UUserWidget(const FObjectInitializer&ObjectInitializer);
为什么它不是默认构造函数?因为默认构造函数不带任何参数,所以UUserWidget(const FObjectInitializer&ObjectInitializer);不能是默认构造函数。你确定吗?我几乎可以肯定这就是导致问题的原因……你的UUserWidget类应该是:public:UUserWidget();然后是UUserWidget(const FObjectInitializer&ObjectInitializer);您有一个链接错误,其中大多数是由于错误地包含类引起的,这与构造函数无关。@Sheim这更多的是一个特定的虚幻引擎问题。您不想向引擎添加代码(如前所述)。本质上的区别是,如果您以Actor为例,它有一个默认值()构造函数。而UUserWidget没有。因此,您需要确保使用FobObjectInitializer构造函数。应该做同样的工作。这可能是因为在升级到允许空构造函数的过程中忽略了非真实引擎。
MyWidget::MyWidget(const FobObjectInitializer&ObjectInitializer):UUserWidget(ObjectInitializer){
UUserWidget();