# Why do I get this C2010 error while trying to use multicast delegates in Unreal?

Other errors I got when compiling:

• No instance of ADD_INTERNAL_DYNAMIC matches the argument list

• DECLARE_DYNAMIC_MULTICAST_DELEGATE_Threeparams Marco redefinition Note: See previous definition of DECLARE_DYNAMIC_MULTICAST_DELEGATE_Three params

XD.cpp:

// Fill out your copyright notice in the Description page of Project Settings.

#include "Test2.h"
#include "XD.h"

// Sets default values
AXD::AXD()
{
// Set this actor to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;

newMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Static Mesh"));
newBox = CreateDefaultSubobject<UBoxComponent>(TEXT("Collision Box"));
newBox->OnComponentBeginOverlap.AddDynamic(this, onCollide);
}

// Called when the game starts or when spawned
void AXD::BeginPlay()
{
Super::BeginPlay();

}

// Called every frame
void AXD::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);

}


XD.h

// Fill out your copyright notice in the Description page of Project Settings.

#pragma once

#include "GameFramework/Actor.h"
#include "XD.generated.h"

#define DECLARE_DYNAMIC_MULTICAST_DELEGATE_ThreeParams(UPrimitiveUPrimitiveComponent* a, AActor* b, UPrimitiveComponent c);

UCLASS()
class TEST2_API AXD : public AActor
{
GENERATED_BODY()

public:
// Sets default values for this actor's properties
AXD();

protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;

public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere)
UStaticMeshComponent* newMesh;

UPROPERTY(EditAnywhere)
UBoxComponent* newBox;

UFUNCTION()
void onCollide(class UPrimitiveComponent* a, class AActor* b, class UPrimitiveComponent* c)
{
Destroy();
}

};

• And google didn't help you? Apr 3 '17 at 1:12
• No, it didn't... Apr 3 '17 at 1:31
• If you really want help with compiler errors, you should copy the exact compiler error description, along with the line where the compiler error occurred. Without it, we'll just be guessing. Apr 3 '17 at 2:16

## 2 Answers

In the #define:

This is wrong:

UPrimitiveUPrimitiveComponent* a


This should be a pointer:

UPrimitiveComponent c


The Input to bind a delegate should be a Class instance and a Pointer to method method. The method should also be marked as UFUNCTION.

So the code should look like this:

newBox->OnComponentBeginOverlap.AddDynamic(this, &AXD::onCollide);