你能帮助我,让我知道为什么会失败吗?我收到错误,如下所示:
#include "stdafx.h"
#include <string>
#include <iostream>
using namespace std;
#include <conio.h>
int main()
{
int a;
string abc = "";
cout << "Enter your Name\n";
cin >> abc;
cout << "Enter Your Age\n";
cin >> a;
cout << "Hello " << abc << ", it is nice to meet you.\n";
StartPause();
return 0;
}
void StartPause()
{
cout << "\nPress any key to continue..." << endl;
_getch();
}
严重级代码描述项目文件行抑制状态 错误C3861'StartPause':找不到标识符GreetingsConsoleApp \ bpm-fs103 \ users ... \ greetingsconsoleapp.cpp 20
答案 0 :(得分:4)
在StartPause()
之前添加函数main
的声明,如下所示:
// Declares StartPause
void StartPause();
int main()
{
...
}
或将整个StartPause
函数移到main
之上。编译器从上到下编译.cpp文件,所以这里编译器已经看到StartPause
的使用而没有真正看到它的声明。
答案 1 :(得分:3)
编译器在这种情况下按顺序从上到下处理编译单元/com/audit/client
文件。
您的.cpp
函数既未在编译器发现调用时被声明也未定义,因此它会抱怨。这类似于拥有一个未声明的变量。
要解决它,要么:
StartPause
的定义之前添加转发函数声明,或main
的定义,使其位于编译单元的底部换句话说,要么:
main
或者这个:
// includes and stuff...
void StartPause(); // <-- forward declaration
int main() {
// body definition
}
void StartPause() {
// body definition
}
这两个中的任何一个都可以解决问题,因为现在编译器会在调用尝试之前知道// includes and stuff...
void StartPause() {
// body definition
}
int main() {
// body definition
}
是什么,并且知道该怎么做。
答案 2 :(得分:0)
编译器永远不会向下看,但总是向上,所以从down调用的任何东西都会导致错误。
#include <iostream> // 1
void Foo(): // 2
int main() // 3
{ // 4
Foo(); // 5
return 0; // 6
} // 7
void Foo() // 8
{ // 9
std::cout << "Foo" << endl; // 10
} // 11
正如你在这里看到的那样,编译器从第1行开始,在第11行完成而不是相反。
当它到达第5行调用Foo时,它会向后看(向上)搜索一个定义,实际上它找到一个不完整的定义(函数原型),告诉它该函数的主体后来要么在这个文件中或者在其他地方。
现在编译器没有抱怨函数体,所以如果你编译你的程序即使删除第8行到第11行(Foo()的定义)!!
***如果你试图在没有Foo定义的情况下运行你的程序,你会得到 一个RUNTIME-ERROR抱怨:调用一个缺少定义的函数。