
C++에서 'no matching function for call' 오류는 특정 함수를 호출할 때, 호출에 사용된 인자가 해당 함수의 정의된 매개변수와 일치하지 않을 때 발생합니다. 컴파일러가 이 오류를 보고한다는 것은 일반적으로 동일한 이름을 가진 함수는 찾았지만, 전달된 인자의 개수나 자료형이 함수 정의와 맞지 않는다는 의미입니다.
즉, 잘못된 자료형의 값을 전달하거나 부적절한 매개변수 조합으로 함수를 호출했을 때 이 오류가 나타납니다. 함수 정의는 컴파일러에게 함수의 이름과 호출 방법을 알려주며, 함수의 전체 내용이 명시적으로 선언됩니다. 이 글에서는 C++에서 'No matching function for a call' 오류가 발생하는 이유와 해결 방법을 자세히 살펴보겠습니다.
클래스 객체를 사용한 오류 예시
이 시나리오에서는 함수 호출 시 매개변수가 일치하지 않아 오류가 발생하는 경우를 다룹니다. 참조(reference)가 필요한 위치에 포인터를 전달하거나, 함수 호출 시 서로 다른 클래스 참조 타입을 사용하면 문제가 생깁니다. 함수를 호출했지만 함수 정의의 인자와 맞지 않으면 'No matching function for call to C++' 오류가 발생합니다.
이 오류를 해결하려면 함수 정의 시 적절히 일치하는 매개변수를 제공해야 합니다. 아래에서 코드와 함께 자세한 설명을 확인할 수 있습니다.

코드 시작 부분에서는 입출력 기능을 위해 <iostream> 헤더 파일을 포함하고, std 네임스페이스를 사용합니다. 그다음 'A'라는 이름의 클래스를 선언하고, setValue() 함수를 public으로 지정합니다. 이 함수에는 정수(int) 자료형의 value 매개변수를 전달하며, 클래스 내부에도 정수형 변수 'value'를 선언합니다.
다음 줄에서는 또 다른 setValue() 함수를 정의합니다. 이 메서드는 변수 'value'를 인자로 받아, 전달받은 값을 증가시킵니다. 이후 main() 함수를 호출하는데, main() 함수는 정수형 'argc'와 문자형 포인터 'argv'를 인자로 받습니다. 'argc'는 운영체제로부터 프로그램에 전달된 매개변수의 개수를 의미하고, 'argv'는 매개변수들의 배열입니다.
이제 'A' 클래스의 객체 'obj'를 생성하고 setValue() 메서드를 호출합니다. 그런데 여기서 객체를 클래스와 올바르게 연결하지 않았습니다. 따라서 setValue() 함수를 호출할 때 오류가 반환되는데, 그 이유는 setValue() 함수 정의에서는 정수형 인자를 받도록 되어 있는데, 실제 호출 시에는 클래스 객체를 인자로 전달했기 때문입니다. 마지막으로 'return 0' 구문으로 프로그램을 종료합니다. 위 코드의 실행 결과는 아래에서 확인할 수 있습니다.

위 코드를 실행하면 'no matching function for call to A' 오류가 출력됩니다.
오류 해결 방법
이 오류를 수정하려면 함수 호출 시 올바른 매개변수를 전달해야 합니다. 또 다른 해결 방법은 서로 다른 매개변수를 가진 오버로드(overload) 함수를 여러 개 만드는 것입니다. 여기서는 main() 함수의 인자만 수정하여 'no matching function for call' 오류를 제거해 보겠습니다. 코드와 자세한 설명은 아래와 같습니다.

std 네임스페이스를 사용한 후 <iostream> 헤더 파일을 포함합니다. 'A'라는 이름의 클래스를 생성하고 setValue() 함수를 public으로 지정합니다. 이 함수는 정수형 변수 'value'를 매개변수로 받으며, 클래스 내부에도 public으로 선언된 정수형 변수 'value'가 있습니다. 다음 줄에서는 또 다른 setValue() 함수를 호출하며, 이 함수 역시 정수형 변수 'value'를 매개변수로 받아 전달된 값을 증가시킵니다.
다음 단계에서 main() 함수를 호출합니다. main() 함수 내부에서는 정수형 'argc'와 문자형 'argv'를 인자로 받습니다. 'argc'는 운영체제가 프로그램에 제공한 매개변수의 개수를 나타내고, 'argv'는 매개변수의 배열입니다. 이제 'A' 클래스의 객체 'obj'를 생성하고, 정수형 변수 'value'를 초기화합니다. 그런 다음 객체의 setValue() 메서드를 사용하여 'value'를 이 함수의 매개변수로 전달합니다.
마지막으로 'return 0'을 추가하여 프로그램을 종료합니다. 중요한 점은 main() 함수에서 함수와 인자의 자료형을 반드시 일치시켜야 한다는 것입니다. 그런 다음 해당 함수를 객체를 통해 호출하고 결과를 반환합니다. 위 코드의 실행 결과는 아래에서 확인할 수 있습니다.

결론
이 글에서는 C++에서 'no matching function for a call' 오류가 발생하는 이유와 해결 방법을 살펴보았습니다. 이 오류가 발생하면 먼저 해당 함수의 매개변수와 자료형을 확인해야 합니다. 함수에 인자를 전달할 때 실수를 하거나 매개변수가 서로 맞지 않는 경우가 많기 때문입니다. 이 경우 올바른 매개변수를 전달하거나, 동일한 자료형을 가진 새로운 함수(오버로드)를 추가해야 합니다. 프로그램에서 함수에 적합한 매개변수를 확인하고 추가하면 'no matching function for a call' 오류는 해결됩니다.
저자 소개

Kalsoom Bibi
안녕하세요, 저는 프리랜서 작가로 Linux 및 기타 기술 관련 콘텐츠를 주로 집필하고 있습니다.