为什么即使定义了标识符后仍会出现“标识符未定义错误”?

时间:2018-09-18 07:51:10

标签: c++ compiler-errors undeclared-identifier

我创建了一个头文件ll.h,其中包含2个类。代码如下所示:

#pragma once
#include<iostream>
#include<conio.h>
using namespace std;

class N{
public:
   int data;
    N *next;
 public:
     N(int);
     ~N();
  };

  class ll{
  public:
      N *head;
  public:
      ll();
      ~ll();
      void aFr(N*);
      void aEn(N*);
   };

  N::N (int d){
  data = d;
  next = NULL;
  }

  N::~N{}

  ll::ll(){
  head = NULL;
  }

  ll::~ll(){}

  void aFr(N* n){
  n->next = head; //identifier "head" undefined
  head = n;
  }

 void aEn(N* n){
 if (head == NULL)// identifier "head" undefined
 {
 head = n;
 n->next = NULL;
 }
 }

两个函数中的head似乎不应调用任何错误。

我仍然是一个初学者,所以请原谅我。

我知道应该没问题,但是我为类和声明本身使用了不同的窗口。

我正在使用Visual Studio 2010运行代码。

2 个答案:

答案 0 :(得分:3)

1)在这里:

N::~N{}

您忘记了析构函数~N()的{​​{3}}:

N::~N(){};

2)在这里:

void aFr(N* n){

在这里:

void aEn(N* n){

您忘记了the parentheses来将功能表示为class ll的方法

void ll::aFr(N* n){
n->next = head; //identifier "head" undefined
head = n;
}

void ll::aEn(N* n){
if (head == NULL)// identifier "head" undefined
{
head = n;
n->next = NULL;
}
}

在进行这些更改后,它可以正常编译。

答案 1 :(得分:0)

您忘记了方法aFR和aEn的类方法声明(ll:)

 void ll::aFr(N* n){
  n->next = head; //identifier "head" undefined
  head = n;
  }

 void ll::aEn(N* n){
 if (head == NULL)// identifier "head" undefined
 {
 head = n;
 n->next = NULL;
 }
 }