我有以下代码(删除了一些不必要的细节):
部首:
enum class TargetType : uint8
{
NoTarget
, Location
, Actor
};
class Target
{
public:
Target();
Target(const FVector &inLocation);
Target(const AActor *inTargetActor);
// ... some methods here
private:
TargetType targetType;
union
{
FVector location;
TWeakObjectPtr<AActor> targetActor;
};
};
来源:
// ... header includes
Target::Target()
: targetType { TargetType::NoTarget }
{
}
Target::Target(const FVector &inLocation)
: targetType { TargetType::Location }
, location(inLocation)
{
}
Target::Target(const AActor *inTargetActor)
: targetType { TargetType::Actor }
, targetActor(inTargetActor)
{
}
// ... some code
当我尝试编译时,我收到以下错误:
error C4582: 'Target::location': constructor is not implicitly called
error C4582: 'Target::targetActor': constructor is not implicitly called
error C4582: 'Target::targetActor': constructor is not implicitly called
error C4582: 'Target::location': constructor is not implicitly called
编译器抱怨工会成员没有被启动。第一个构造函数抱怨两个成员都没有被启动。另外两个人抱怨该成员没有被发起,所以例如如果我想使用Target::location
,编译器也希望我启动Target::targetActor
。
如果我不打算使用它们,我是否真的必须启动这两个成员,例如在第一个构造函数?对我来说没有意义,因为我不想在这种情况下使用数据?另外,当我想使用Target::location
作为活跃会员时,为什么我必须启动Target::targetActor
?我在这里错过了什么?