什么是未声明的标识符错误?常见的原因是什么,如何解决这些问题?
错误文本示例。
error C2065: 'cout': undeclared identifier
。'cout'未声明(在此函数中第一次使用)
。它们最常见的原因是忘记包含包含函数声明的头文件,例如,这个程序将给出一个'未声明的标识符'错误。
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
要解决这个问题,我们必须包含头文件。
#include <iostream>
int main() {
std::cout << "Hello world!" << std::endl;
return 0;
}
如果你写了头文件并正确地包含它,头文件可能包含错误的include guard。
要了解更多信息,请参见http://msdn.microsoft.com/en-us/library/aa229215(v=vs.60).aspx。
另一个常见的初学者错误的来源是当你拼错了一个变量。
int main() {
int aComplicatedName;
AComplicatedName = 1; /* mind the uppercase A */
return 0;
}
例如,这段代码会给出一个错误,因为你需要使用std::string
。
#include <string>
int main() {
std::string s1 = "Hello"; // Correct.
string s2 = "world"; // WRONG - would give error.
}
void f() { g(); }
void g() { }
g
在第一次使用前没有被声明。要解决这个问题,可以将g'的定义移到
f'之前。
void g() { }
void f() { g(); }
或者在 "f "前添加 "g "的声明。
void g(); // declaration
void f() { g(); }
void g() { } // definition
这是Visual Studio特有的。在VS中,你需要在任何代码前添加#include "stdafx.h"
。在它之前的代码会被编译器忽略,所以如果你有这个问题。
#include <iostream>
#include "stdafx.h"
#include <iostream>
会被忽略。你需要把它移到下面。
#include "stdafx.h"
#include <iostream>
请随意编辑这个答案。
在C和C++中,所有的名字在使用前都必须被声明。如果你试图使用一个没有被声明的变量或函数的名称,你会得到一个"未声明的标识符"错误。
然而,函数在C语言中是一种特殊情况(而且只在C语言中),因为你不必先声明它们。C语言编译器会假定函数存在,其参数的数量和类型与调用时一样。如果实际的函数定义与之不一致,你会得到另一个错误。在C++中不存在这种函数的特殊情况。
你可以通过确保函数和变量在使用前被声明来解决这类错误。在printf
的情况下,你需要包括头文件<stdio.h>
(或<cstdio>
在C++中)。
对于标准函数,我建议你查看例如这个参考网站,并搜索你想使用的函数。每个函数的文档都会告诉你需要什么头文件。