>  기사  >  백엔드 개발  >  C++ 컴파일 오류: 함수 서명이 예상과 일치하지 않습니다. 어떻게 해결합니까?

C++ 컴파일 오류: 함수 서명이 예상과 일치하지 않습니다. 어떻게 해결합니까?

WBOY
WBOY원래의
2023-08-22 16:03:39922검색

C++ 컴파일 오류: 함수 서명이 예상과 일치하지 않습니다. 어떻게 해결합니까?

강력한 형식의 언어인 C++는 프로그램을 작성할 때 엄격한 형식 일치 규칙을 따라야 합니다. 이는 함수를 정의할 때 함수 선언 및 함수 호출 중에 함수의 매개변수 유형과 반환 값 유형이 일치하는지 확인해야 함을 의미합니다. 그렇지 않으면 컴파일러는 "함수 서명이 예상과 일치하지 않습니다"라는 오류 메시지를 표시합니다. 이 오류는 일반적으로 전달된 매개 변수 유형이 잘못되었거나 반환 유형이 일치하지 않는 경우에 발생합니다.

그렇다면 프로그램을 작성할 때 이런 오류가 발생한다면 어떻게 해결해야 할까요? 다음은 여러분에게 소개할 몇 가지 일반적인 솔루션입니다.

1. 함수 서명 및 호출 방법 확인

함수 서명에는 함수 이름, 매개변수 유형, 반환 유형 등이 포함됩니다. 함수마다 서명이 달라야 합니다. 먼저, 함수의 서명이 함수 호출 시 사용된 서명과 일치하는지 확인해야 합니다. 함수 서명이 호출 메서드와 일치하지 않으면 수정해야 합니다. 수정 방법에는 매개변수 유형이나 반환 값 유형 변경 등이 포함됩니다. 예를 들어 다음 코드는 함수 서명 불일치 오류를 일으킬 수 있습니다.

#include<iostream>
using namespace std;
void test(int a,char b)
{
    cout<<"int="<<a<<endl<<"char="<<b<<endl;
}
int main()
{
    char c='a';
    test(c);
    return 0;
}

test 함수 정의에서 매개변수 유형은 intchar . 그러나 <code>main 함수에는 test 함수에 전달하는 매개변수가 하나만 있고 유형은 char입니다. 이때 컴파일러는 test 함수에 대해 "함수 서명이 예상과 일치하지 않습니다" 오류를 표시합니다. test函数的定义中,参数类型是intchar。但在main函数中,我们传递给test函数的参数只有一个,且类型为char。这时编译器就会提示test函数的“函数签名与预期不符”错误。

修改方式如下:

#include<iostream>
using namespace std;
void test(char a)
{
    cout<<"char="<<a<<endl;
}
int main()
{
    char c='a';
    test(c);
    return 0;
}

2.检查头文件引用

在头文件中定义函数时,要确保所有使用该函数的源文件都能找到该头文件。如果某个源文件没有包含该头文件,那么编译器就找不到声明该函数。这种情况也可能会导致函数签名不符的错误。此时需要检查源文件中的头文件是否正确引用。

3.检查函数调用时传递的参数类型

编写程序时,可能会错误地给函数传递错误的参数类型。这种情况下编译器也会报函数签名不符的错误。我们可以通过检查函数调用时传递的参数类型来解决这种问题。

例如:

#include<iostream>
using namespace std;
void test(int a,char b)
{
    cout<<"int="<<a<<endl<<"char="<<b<<endl;
}
int main()
{
    double d= 1.5;
    char c= 'a';
    test(d,c);
    return 0;
}

main函数中的test()调用中,我们传递了一个double类型的参数给test函数,而test函数的第一个参数是一个int类型的参数。由于intdouble

수정 사항은 다음과 같습니다.

#include<iostream>
using namespace std;
void test(double a,char b)//修改参数类型为double
{
    cout<<"double="<<a<<endl<<"char="<<b<<endl;
}
int main()
{
    double d= 1.5;
    char c= 'a';
    test(d,c);
    return 0;
}

2. 헤더 파일 참조 확인

헤더 파일에 함수를 정의할 때 해당 함수를 사용하는 모든 소스 파일이 해당 헤더 파일을 찾을 수 있는지 확인하세요. 소스 파일에 이 헤더 파일이 포함되어 있지 않으면 컴파일러는 선언된 함수를 찾을 수 없습니다. 이 상황은 함수 서명 불일치 오류로 이어질 수도 있습니다. 이때 소스파일의 헤더파일이 올바르게 참조되고 있는지 확인해야 합니다.

3. 함수 호출 시 전달된 매개변수 유형을 확인하세요

프로그램 작성 시 실수로 잘못된 매개변수 유형을 함수에 전달할 수 있습니다. 이 경우 컴파일러는 함수 서명이 일치하지 않는다는 오류도 보고합니다. 함수 호출 시 전달되는 매개변수의 유형을 확인하면 이 문제를 해결할 수 있습니다. 🎜🎜예: 🎜rrreee🎜 main 함수의 test() 호출에서 double 유형의 매개변수를 에 전달했습니다. >test 함수이고, test 함수의 첫 번째 매개변수는 int 유형의 매개변수입니다. intdouble 유형이 일치하지 않으므로 컴파일러는 함수 서명이 일치하지 않는다는 오류 메시지를 표시합니다. 🎜🎜수정 방법은 다음과 같습니다. 🎜rrreee🎜4. 함수 반환 유형을 확인하세요🎜🎜함수의 반환 유형도 함수에서 선언한 반환 유형과 일치해야 합니다. 일관성이 없으면 컴파일러는 함수 서명이 일치하지 않는다는 오류 메시지도 표시합니다. 이때 함수 ​​반환 유형이 함수 선언과 일치하는지 확인하고 필요한 경우 수정해야 합니다. 🎜🎜위는 함수 서명 불일치 오류에 대한 몇 가지 고전적인 솔루션입니다. 프로그램을 작성할 때 이 오류를 방지하려면 함수 서명 일치 규칙을 따라야 합니다. 이런 종류의 오류가 발생하면 위의 측면에서 문제를 해결하고 문제를 신속하게 해결할 수 있습니다. 🎜

위 내용은 C++ 컴파일 오류: 함수 서명이 예상과 일치하지 않습니다. 어떻게 해결합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.