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
的另一个函数。
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
的另一个函数。