Почему существует «Идентификатор - неопределенная ошибка» даже после того, как он был определен? - PullRequest
0 голосов
/ 18 сентября 2018

Я создал заголовочный файл ll.h с двумя классами в нем. Код выглядит примерно так:

#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 голосов
/ 18 сентября 2018

1) Здесь:

N::~N{}

вы забыли круглые скобки деструктора ~N():

N::~N(){};

2)Здесь:

void aFr(N* n){

и здесь:

void aEn(N* n){

Вы забыли использовать оператор разрешения области действия для обозначения функций как методов 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;
}
}

Прекрасно компилируется после этих изменений.

0 голосов
/ 18 сентября 2018

Вы забыли объявление метода класса (ll :) для методов aFR и aEn

 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;
 }
 }
...