在函数调用中找不到标识符错误

我在这里有一个程序,我反转input的string的情况下。 这是我的.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之前。 不要担心在文件底部看似最重要的function(主要)。 在C或C ++中这是很常见的做法。

当编译器遇到main()中的swapCase调用时,它不知道函数swapCase,所以报告错误。 你可以移动swapCase上面main的定义 ,或者在main上面声明 swap分支:

 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'; 

在我的testing中的build设是一个个人风格的问题。 你很好。 最主要的是修改名称[i]的方式 – 使用“a”与“A”的区别使得它更加明显,没有人会怀疑“32”是否真的是正确的。

祝你好运学习!

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