什么是“未声明的标识符”的错误,如何解决?什么是“未声明的标识符”的错误,如何解决?(What is

2019-05-09 01:36发布

什么是未声明的标识符错误? 什么是常见的原因以及如何解决这些问题?

例如错误文本:

  • 对于在Visual Studio编译器: error C2065: 'cout' : undeclared identifier
  • 对于GCC编译器: 'cout' undeclared (first use in this function)

Answer 1:

他们最经常来自忘记包括包含函数声明的头文件,例如,该程序会给出一个“未声明的标识符”的错误:

缺少标题

int main() {
    std::cout << "Hello world!" << std::endl;
    return 0;
}

为了解决这个问题,我们必须包括头:

#include <iostream>
int main() {
    std::cout << "Hello world!" << std::endl;
    return 0;
}

如果你写的标题和正确包含它的头包含的错误包括后卫 。

要了解更多信息,请参阅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尚未在第一次使用前声明。 为了解决这个问题,无论是移动的定义gf

void g() { }
void f() { g(); }

或添加的声明gf

void g(); // declaration
void f() { g(); }
void g() { } // definition

stdafx.h中没有在上面(VS专用)

这是Visual Studio的特异性。 在VS,你需要添加#include "stdafx.h"任何代码之前。 之前的代码被编译器忽略,因此,如果你有这样的:

#include <iostream>
#include "stdafx.h"

所述#include <iostream>将被忽略。 你需要将它移到如下:

#include "stdafx.h"
#include <iostream>

随意编辑这个答案。



Answer 2:

考虑在谈话中有类似的情况。 试想一下,你的朋友对你说,“鲍勃过来吃饭,”你不知道谁是鲍勃。 你会被迷惑,对吧? 你的朋友应该说,“我有一位同事叫鲍勃。鲍勃是过来吃饭了。” 现在,鲍勃已申报,你知道谁是你的朋友都在谈论。

编译器发出,当你试图使用一些标识符(这将是一个函数,变量,类等的名称)和编译器还没有看到它的声明的“未声明的标识符”的错误。 也就是说,编译器不知道你指的是因为它以前没有见过它。

如果你用C或C ++这样的错误,这意味着你还没有告诉你要使用的东西的编译器。 声明通常在头文件中,所以它可能意味着您还没有相应的头。 当然,这可能是因为你只是还没有想起在所有申报的实体。

一些编译器给根据上下文更具体的错误。 例如,试图编译X x; 其中类型X尚未声明铿锵会告诉你“未知类型名称X ”。 这是更为有用,因为你知道它试图解释X的类型。 但是,如果你有int x = y; 其中y还没有被声明,它会告诉你“使用未声明的标识符的y ”因为有大约究竟有些含糊y可能代表。



Answer 3:

我有同样的问题与一个自定义的类,它是在一个命名空间中定义。 我试图用类没有命名空间,从而使编译器错误“标识符‘MyClass的’不确定”。 添加

using namespace <MyNamespace>

或使用类等

MyNamespace::MyClass myClass;

解决了这个问题。



Answer 4:

在C和C ++的所有名称必须在使用之前需要申报。 如果您尝试使用一个变量的名称或尚未声明,你会得到一个“未声明的标识符”错误的功能。

然而,功能是在C特殊情况(在只有C)中,你不必首先声明它们。 C编译器将假设函数的数量和参数类型如在呼叫存在。 如果实际的函数定义不匹配,你会得到另一个错误。 对于功能这种特殊情况下不会在C ++中存在。

您可以通过确保函数和变量在使用之前声明它们解决这些样的错误。 在的情况下printf需要包含头文件<stdio.h> (或<cstdio>在C ++)。

对于标准的功能,我建议你检查如该参考网站 ,并搜索您想要使用的功能。 每个函数的文档会告诉你所需要的头文件。



Answer 5:

这些错误meassages

1.For the Visual Studio compiler: error C2065: 'printf' : undeclared identifier
2.For the GCC compiler: `printf' undeclared (first use in this function)

意味着你使用的名字printf但编译器看不到的地方的名字被宣布并相应地不知道这意味着什么。

在程序中使用的任何名称应当使用其之前声明。 编译器必须知道什么名字表示。

在这种特殊情况下,编译器不看到名字的声明printf 。 正如我们所知道的(但不是编译器)它是在头部声明标准C函数的名称<stdio.h>在C或报头<cstdio> C ++中,并置于标准( std:: )和全局( :: ) (不一定)命名空间。

因此,使用此功能,我们必须通过包含相应的头文件提供其名称声明编译器前。

例如C:

#include <stdio.h>

int main( void )
{
   printf( "Hello World\n" );
}

C ++:

#include <cstdio>

int main()
{
   std::printf( "Hello World\n" );
   // or printf( "Hello World\n" );
   // or ::printf( "Hello World\n" );
}

有时,这种错误的原因是一个简单的拼写错误。 例如,让我们假设你定义的函数PrintHello

void PrintHello()
{
    std::printf( "Hello World\n" );
}

但在主要输入有误,并代替PrintHello键入printHello用小写字母“P”。

#include <cstdio>

void PrintHello()
{
    std::printf( "Hello World\n" );
}

int main()
{
   printHello();
}

在这种情况下,编译器会发出这样的错误,因为它没有看到名字的声明printHelloPrintHelloprintHello是两个不同的名字,其中一个被宣布和其他未声明,但在主体中使用



Answer 6:

另一种可能的情况:访问父在模板类(模板类)构件。

修正方法:使用由它的全名父类构件(由前缀this->parentClassName::到成员的名称)。

参见: 模板:父类的成员变量在继承的类不可见



Answer 7:

它就像使用功能未声明的。 头文件将包含函数printf()。 包含头文件在你的程序,这是该解决方案。 一些用户自定义函数也可以通过错误时不使用它之前宣布。 如果全球范围内使用没有probs。



Answer 8:

大多数时候,如果你很确定你输入库中的问题,Visual Studio将引导你用智能感知。

这里是我工作:

确保#include "stdafx.h"先声明,即在所有的包括顶部。



Answer 9:

A C ++标识符是用于标识变量,函数,类,模块,或任何其它用户定义的项目的名称。 在C ++中的所有名字都在使用之前需要申报。 如果您尝试使用这样一个还没有被宣布,你会得到一个“未声明的标识符”的名称编译错误。

根据该文件 ,的printf()的声明是在cstdio即你必须包括它,使用该功能之前。



Answer 10:

在C错误的每个未声明的变量来,因为编译器无法发现它在该项目。 一个可以包括在其中变量定义库的外部(头)文件。 因此,在你的问题,你需要<stdio.h> ,这是一个标准的输入输出文件,它描述的printf()功能。

根据该文件 ,fprintf中的()的声明是在IE中,你必须包括它,使用该功能之前。



Answer 11:

检查是否导入在您的m,并在您的.h实例给出相同的程序包:我有这个非常有问题的init方法,它是由在.m文件缺少“#进口”造成



文章来源: What is an 'undeclared identifier' error and how do I fix it?