在函数调用中找不到标识符错误
我在这里有一个程序,我反转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。
- 为什么是 ;; 允许在局部variables声明之后,而不是在一个字段声明之后?
- FBSOpenApplicationErrorDomain代码= 3
- Eclipse如何创build一个没有解决的编译问题的类?
- 错误:执行任务失败:app:transformClassesWithJarMergingForDebug'
- Swift类错误:属性未在super.init调用初始化
- generics方法上的多个通配符使Java编译器(和我!)非常困惑
- 扩展方法必须在非generics静态类中定义
- 条件运算符的返回types和两阶段查找
- C# – 不能隐式地将List <Product>转换为List <IProduct>