ISO C++禁止使用未定义类型的声明“Stack”。

4
我已经设置了以下头文件来创建使用数组的堆栈。在第7行,我得到了以下错误信息:

错误:ISO C++禁止声明没有类型的“Stack”。

我认为类型应该是输入值。感谢您的帮助。谢谢。
#ifndef ARRAYSTACKER_H_INCLUDED
#define ARRAYSTACKER_H_INCLUDED
// ArrayStacker.h: header file
class ArrayStack {
    int MaxSize;
    int EmptyStack;
    int top;
    int* items;
public:
    Stacker(int sizeIn);
    ~Stacker();
    void push(int intIn);
    int pop();
    int peekIn();
    int empty();
    int full();
};
#endif // ARRAYSTACKER_H_INCLUDED
2个回答

12
构造函数和析构函数的名称应该是类的名称,即ArrayStack,而不是Stacker

是的,请修复构造函数名称并查看是否仍然出现错误...如果您仍然遇到错误,请发布您的构造函数实现。 - Adam

10

error: ISO C++ forbids declaration of "identifier" with no type.错误表明,所声明的identifier的类型,或者identifier本身是一个尚未找到其声明的类型。

例如,如果您在代码中写了以下内容:

ArrayStack Stack;

如果您未包含定义“ArrayStack”的头文件,则上述行将导致此类错误。如果您在声明变量或将其用作函数返回类型时意外使用了Stack而非ArrayStack,也会出现此类错误。我还应该指出,您的头文件可能存在一个非常明显的错误,您可能需要进行更正;类的构造函数和析构函数必须与类名匹配。编译器将感到困惑,因为当它看到“Stacker”时,它将把它解释为一个名为“Stacker”的函数,您只是忘记给它一个返回类型(它不会意识到您实际上是想让它成为构造函数,并且只是拼错了它的拼写)。


是的。谢谢。我对不使用文件名作为类名的约定感到困惑,这与Java不同。但是类并不是文件名搞错了。糟糕!好答案。 - JDragon314159
@JKid,不用谢。同时,请通过点赞来表达你的感激之情。 - Michael Aaron Safyan
好的。点赞?得想出来然后去做。谢谢你让我知道。 - JDragon314159

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接