Maison  >  Article  >  développement back-end  >  Erreur de compilation C++ : la signature de la fonction ne correspond pas à celle attendue, comment la résoudre ?

Erreur de compilation C++ : la signature de la fonction ne correspond pas à celle attendue, comment la résoudre ?

WBOY
WBOYoriginal
2023-08-22 16:03:39860parcourir

Erreur de compilation C++ : la signature de la fonction ne correspond pas à celle attendue, comment la résoudre ?

En tant que langage fortement typé, le C++ doit suivre les règles de correspondance de type stricte lors de l'écriture de programmes. Cela signifie que lorsque vous définissez une fonction, vous devez vous assurer que le type de paramètre et le type de valeur de retour de la fonction sont cohérents lors de la déclaration de fonction et de l'appel de fonction. Sinon, le compilateur affichera un message d'erreur "La signature de la fonction ne correspond pas à celle attendue". Cette erreur se produit généralement lorsque le type de paramètre transmis est incorrect, que le type de retour ne correspond pas, etc.

Alors, si vous rencontrez ce genre d'erreur lors de l'écriture d'un programme, comment devez-vous la résoudre ? Voici quelques solutions courantes à vous présenter.

1. Vérifiez la signature de la fonction et la méthode d'appel

La signature de la fonction comprend le nom de la fonction, le type de paramètre, le type de retour, etc. Différentes fonctions doivent avoir des signatures différentes. Tout d’abord, nous devons vérifier que la signature de la fonction correspond à celle utilisée lors de l’appel de la fonction. Si la signature de la fonction ne correspond pas à la méthode appelante, elle doit être modifiée. Les méthodes de modification incluent la modification des types de paramètres ou des types de valeurs de retour, etc. Par exemple, le code suivant peut provoquer une erreur d'incompatibilité de signature de fonction :

#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;
}

Dans la définition de la fonction test, les types de paramètres sont int et char . Mais dans la fonction <code>main, il n'y a qu'un seul paramètre que nous transmettons à la fonction test, et le type est char. À ce stade, le compilateur affichera l'erreur « La signature de la fonction ne correspond pas à celle attendue » pour la fonction 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

La méthode de modification est la suivante :

#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. Vérifiez la référence du fichier d'en-tête

Lors de la définition d'une fonction dans un fichier d'en-tête, assurez-vous que tous les fichiers source qui utilisent la fonction peuvent trouver le fichier d'en-tête. Si un fichier source n'inclut pas ce fichier d'en-tête, le compilateur ne trouve pas la fonction déclarée. Cette situation peut également entraîner des erreurs de non-concordance de signature de fonction. A ce stade, vous devez vérifier si le fichier d'en-tête du fichier source est correctement référencé.

3. Vérifiez les types de paramètres transmis lorsque la fonction est appelée

Lors de l'écriture d'un programme, vous pouvez transmettre par erreur le mauvais type de paramètre à la fonction. Dans ce cas, le compilateur signalera également une erreur indiquant que la signature de la fonction ne correspond pas. Nous pouvons résoudre ce problème en vérifiant les types de paramètres passés lorsque la fonction est appelée. 🎜🎜Par exemple : 🎜rrreee🎜Dans l'appel test() dans la fonction main, nous avons passé un paramètre de type double à test, et le premier paramètre de la fonction test est un paramètre de type int. Étant donné que les types de int et double ne correspondent pas, le compilateur affichera une erreur indiquant que la signature de la fonction ne correspond pas. 🎜🎜La méthode de modification est la suivante : 🎜rrreee🎜4. Vérifiez le type de retour de la fonction🎜🎜Le type de retour de la fonction doit également être cohérent avec le type de retour déclaré par la fonction. S'ils sont incohérents, le compilateur affichera également un message d'erreur indiquant que la signature de la fonction ne correspond pas. À ce stade, nous devons vérifier si le type de retour de la fonction est cohérent avec la déclaration de la fonction et le modifier si nécessaire. 🎜🎜Ci-dessus sont plusieurs solutions classiques à l'erreur d'incompatibilité de signature de fonction. Lors de l'écriture d'un programme, nous devons suivre les règles de correspondance des signatures de fonction pour éviter cette erreur. Lorsque nous rencontrons ce type d’erreur, nous pouvons dépanner à partir des aspects ci-dessus et résoudre le problème rapidement. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn