在函数调用中未发现标识符错误
Identifier not found error on function call
这里有一个程序,我将输入的字符串的大小写颠倒。这是我的。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
相关文章:
- 设置 Visual Studio for MPI: 找不到标识符错误
- 从子类访问模板类成员时出现"找不到标识符"错误
- 未声明的标识符错误,但变量定义正确 (?)
- 尝试使用类时获取标识符错误
- 我收到未声明的标识符错误,但我已包含头文件?
- 常量自动/标识符错误
- 为什么我的类对象会导致未申报的标识符错误
- C 未申报的标识符错误
- 在Visual Studio中使用C 类 - 未申报的标识符错误
- 编译器不喜欢我的类C++。获取未声明的标识符错误等
- 奇怪的未知标识符错误
- C 数组未申报的标识符错误
- 定义中未声明的标识符错误 C2065,显然存在
- 找不到标识符错误
- 稍后在程序中使用if-else构造内部声明的变量会导致未声明的标识符错误
- Xcode C++未声明的标识符错误
- 编译时未找到"log10"标识符错误
- 标识符错误之前缺少';' - 无法运行 MPI 示例
- 时间开始未找到标识符错误
- 声明项时出现未声明的标识符错误