ISO C++禁止声明'Stack'没有类型

hel*_*esk 1 c++ syntax

我有一个堆栈结构的头文件.我不明白的是这个错误让我感到困扰:

ISO C++禁止声明'Stack'没有类型

这是代码:

#include <stdexcept>

class Element;
class Stack{
    public:
        Stack():first(0){}; //constructor
        ~Stack(); //destructor
        void push(int d);
        int pop()throw(length_error);
        bool empty();

    private:
        Element *first;
        Stack(const& Stack){}; //copy constructor
        Stack& operator = (const& Stack){}; //assignment operator..
};
Run Code Online (Sandbox Code Playgroud)

有没有人知道这个错误意味着什么?

CB *_*ley 9

Stack& operator = (const& Stack)应该是Stack& operator = (const Stack&).

您不能拥有指向引用或引用数组或任何内容的指针,因此编译器认为&必须结束声明的类型部分,并且以下内容Stack必须是参数名称.但是没有类型,const&所以编译器说你不能声明Stack没有类型的参数.在旧版本的C中,类型int有时在上下文中推断出类型可能会出现但被省略,这就是为什么错误会讨论ISO C++禁止它的原因.

  • @henryjoseph:我认为你的意思是`length_error`.`length_error`在std命名空间中,所以你需要`throw(std :: length_error)`尽管我建议避免像这样的动态异常规范.它们已被弃用. (3认同)