【问题标题】:'Node' does not name a type“节点”没有命名类型
【发布时间】:2020-11-28 17:02:22
【问题描述】:

我正在尝试学习 C++,目前我正在使用指针实现堆栈,但我在使用标头和 include 指令时遇到了问题。

这是我的代码:

Main.cpp:

#include <stdio.h>
#include <iostream>
#include "Nodo.h"
#include "Pila.h"
using namespace std;
int main() {
  Pila pila;
  cout << "Apilar(20)" << endl;
  pila.apilar(10);
  pila.apilar(20);
  pila.apilar(30);
  cout << pila.desapilar() << endl;
  cout << pila.desapilar() << endl;
  cout << pila.desapilar() << endl;

  return 0;
};

Pila.h:

#ifndef PILA_H
#define PILA_H
#include "Nodo.h"
#include <cstddef>

class Pila {
  private:
    Nodo cima;
  public:
    Pila();
    ~Pila();
    void apilar(int v);
    int desapilar();
};

#endif // PILA_H

Pila.cpp:

#include "Pila.h"
#include "Nodo.h"

Pila::Pila(){
    cima = NULL;
}
Pila::~Pila()
{
  while(cima) desapilar();
}

void Pila::apilar(int v)
{
  Nodo nuevo;
  nuevo = new Nodo(v, cima);
  cima = nuevo;
}

int Pila::desapilar()
{
  Nodo nodo;
  int v;
  if (!cima) return 0;
  nodo = cima;
  cima = nodo->siguiente;
  v = nodo->valor;
  delete nodo;
  return v;
}

Nodo.h:

#ifndef NODO_H
#define NODO_H
#include "Pila.h"
class Nodo {
  private:
    int valor;
    Nodo *siguiente;
    friend class Pila;
  public:
    Nodo(int v, Nodo *sig);
};


#endif // NODO_H

Nodo.cpp:

#include "Nodo.h"

Nodo::Nodo(int v, Nodo *sig){
    valor = v;
    siguiente = sig;
};

我的程序的输出如下:error: 'Nodo' does not name a type,我认为它与include指令有关,但我不知道如何解决它.提前致谢。

编辑:我的错,没有指出错误是在哪一行代码中。它在 Pila.h 文件的第 8 行,Nodo cima;

【问题讨论】:

  • main 包括Nodo.hNodo.h 立即包含Pila.hPila.h 立即包含Nodo.h,但您的包含守卫阻止它,它被跳过。当您第一次使用Nodo 时,Nodo 尚未被声明。如果您想了解我的意思,请了解如何使您的编译器产生预处理器输出。例如,对于 gcc,这是 -E 标志。
  • 现在,正如所写,您的Pila 不需要包含在Nodo 中。 Nodo 不需要知道 Pila。通常,您包含的项目不需要知道包含它们的容器。问问自己,apple 是否需要知道sack 的存在才能成为苹果?当然不是。你的Nodo 不需要知道Pila 来做Nodo 的所有必要的事情。

标签: c++ stack include


【解决方案1】:

您同时使用了“Pila.h”和“Nodo.h”。要正确使用两者,您需要有一个前向声明。

你可以有如下声明:

class Nodo;
class Pila;

这告诉编译器“Nodo”和“Pila”都是类。编译器不需要知道这两个类的结构。只要它们存在就足够了。

【讨论】:

    猜你喜欢
    • 2022-01-21
    • 2023-04-07
    • 2021-02-03
    • 2017-04-01
    • 2015-06-09
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多