我这里有一个程序,可以反转输入字符串的大小写。这是我的 .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 的 definition 移动到 main 之上,或者 declare 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';
我的 if 测试中的构建是个人风格的问题。你的很好。最主要的是修改 name[i] 的方法——使用 'a' 与 'A' 的差异使得发生的事情更加明显,并且没有人会怀疑 '32' 是否真的正确。
祝学习顺利!
你必须在主定义之前定义 void swapCase 。
我在编译现有应用程序时遇到了类似的错误,我在其中添加了新功能......
错误 C3861:“FunctionName”:找不到标识符
简化示例
#include <Windows.h>
#include <iostream>
namespace Test
{
int FunctionName();
int main()
{
int i = FunctionName();
// do tasks
return i;
}
int FunctionName()
{
/* my implemented logic with win32 dependencies */
return -1;
}
}