본문 바로가기
게임 개발 일지/내일배움캠프 TIL

재정의할 적절한 메서드를 찾을 수 없습니다.

by 빛하_ 2024. 1. 5.

 

Team Project #4
2D - Top Down + 멀티 협동 탈출 게임 
재정의할 메서드를 찾을 수 없습니다.

 

컴파일러 오류 CS0115 : ‘function’: 재정의할 적절한 메서드를 찾을 수 없습니다.

메서드가 override로 표시되었지만 컴파일러에서 재정의할 메서드를 찾을 수 없는 경우에 발생한다.

 

// UsableItemData.cs
public abstract class UsableItemData : MonoBehaviour
{
    [SerializeField] private bool destroyOnPickup = true;
    [SerializeField] private LayerMask saveOnPickup;

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (saveOnPickup.value == (saveOnPickup.value | (1 << other.gameObject.layer)))
        {
            OnUse(other.gameObject);

            if (destroyOnPickup)
            {
                Destroy(gameObject);
            }
        }
    }
    protected abstract void OnUse(GameObject receiver);
}



// Grenade.cs

public class Grenade : UsableItemData
{
    [SerializeField] int damage = 20;

    protected override void OnUse(GameObject receiver)
    {
        // 수류탄을 실행시키는 함수
    }
}

 

<문제 상황>

Grenade가 추상 클래스 UsableItemData를 상속받고 있다.

따라서 OnUse 함수를 반드시 구현해야 한다.

 

<해결 방법>

(1) OnUse 함수에서 override 키워드 제거하기

(2) UsableItemData를 OnUse의 기본 클래스로 사용하기 (직접 상속)

 

오류 CS0115는 상속 과정에서 발생한 오류라고 볼 수 있다.

그런데 내가 문제를 해결한 방법은 override를 사용한 클래스를 지우고 똑같이 override를 사용해 다시 작성한 것이다.

한 글자도 바꾸지 않고 다시 작성했더니 오류가 사라졌다.

이 경우 override를 먼저 생성하고 상위 클래스를 나중에 구현하다보니 상속 받은 클래스가 상위 클래스를 인식하는 것에서 오류가 발생했던 것 같다. 

 

<공부 자료>

https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/compiler-messages/cs0115

 

 

 

댓글