在函数调用中未发现标识符错误

Identifier not found error on function call

本文关键字:标识符 错误 未发现 函数调用      更新时间:2023-10-16

这里有一个程序,我将输入的字符串的大小写颠倒。这是我的。cpp文件中的代码,我使用Visual Studio c++ IDE。我不确定我在头文件中需要什么,或者我是否需要一个头文件来完成这项工作。

函数调用swapCase出错。由于某些我不确定的原因,Main没有看到swapCase。

#include <cctype>
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    char name[30];
    cout<<"Enter a name: ";
    cin.getline(name, 30);
    swapCase(name);
    cout<<"Changed case is: "<< name <<endl;
    _getch();
    return 0;
}
void swapCase (char* name)
{
    for(int i=0;name[i];i++)
    {
        if ( name[i] >= 'A' && name[i] <= 'Z' )
            name[i] += 32; //changing upper to lower
        else if( name[i] >= 'a' && name[i] <= 'z')
            name[i] -= 32; //changing lower to upper
    }
}

语法或语义方面的任何其他提示都是值得赞赏的。

在main函数前添加一行:

void swapCase (char* name);
int main()
{
   ...
   swapCase(name);    // swapCase prototype should be known at this point
   ...
}

这被称为前向声明:编译器在编译函数调用时需要知道函数原型

与您可能习惯的其他语言不同,c++中的所有内容都必须在使用之前声明。编译器将从上到下读取源文件,所以当它调用swapCase时,它不知道它是什么,所以你会得到一个错误。你可以像这样在main之前声明函数:

void swapCase(char *name);

或者您可以简单地将该函数的整个移到文件中的main前面。不要担心将看似最重要的函数(main)放在文件的底部。这在C或c++中很常见

编译器在main()中遇到对swapCase的调用时,它不知道swapCase函数,因此它报告一个错误。您可以将swapCase的定义移到main之上,或者声明 swap case在main之上:

void swapCase(char* name);

同样,swapCase中的32会让读者停下来思考。评论很有帮助!在这种情况下,写

会更清晰
if ('A' <= name[i] && name[i] <= 'Z')
    name[i] += 'a' - 'A';
else if ('a' <= name[i] && name[i] <= 'z')
    name[i] += 'A' - 'a';

我的假设测试中的结构是个人风格的问题。你的也很好。最主要的是修改名称[i]的方法——使用'a' vs的区别。"A"让事情变得更明显,没有人会怀疑"32"是否正确。

祝你学习好运!

必须在主定义之前定义void swapCase