UE4 UFUNCTION(NetMulticast) 编译错误。错误 LNK2005:函数已在 *.cpp.obj 中定义

UE4 Compile error with UFUNCTION(NetMulticast). error LNK2005: function already defined in *.cpp.obj

MyActor.h

UCLASS()
class FPS_API AMyActor: public AActor
{
    GENERATED_BODY()
...
public:
    UFUNCTION(NetMulticast, Reliable)
    void MulticastRPCMyFunction();
...
}

MyActor.cpp

void AMyActor::MulticastRPCMyFunction()
{
    UE_LOG(LogTemp, Log, TEXT("Message"));
}

当我编译我的项目时,我可以检查下面的错误信息。 编译错误

*.gen.cpp.obj : error LNK2005: "public: void __cdecl *::MulticastRPCMyFunction(void)" (?MulticastRPCMyFunction@*@@QEAAXXZ) already defined in *.cpp.obj

对于网络函数(在您的情况下是 NetMulticast 元数据),您不会在 Cpp 文件中将函数命名为与头文件相同的名称,因为它是由 UHT 生成的(因此有关它的链接器错误)已经被定义)。

在您的情况下,您的 Cpp 文件需要如下所示:

void AMyActor::MulticastRPCMyFunction_Implementation()
{
    UE_LOG(LogTemp, Log, TEXT("Message"));
}

注意函数名称中添加的 _Implementation

如果您曾经添加 WithValidation 元数据,那么您将需要在函数名称末尾添加 _Validate 的另一个函数。