ISO C++ 禁止声明没有类型的“堆栈”

Posted

技术标签:

【中文标题】ISO C++ 禁止声明没有类型的“堆栈”【英文标题】:ISO C++ forbids declaration of 'Stack' with no type 【发布时间】:2011-11-25 23:53:49 【问题描述】:

我在下面有一个堆栈结构的头文件。我不明白的是它正在困扰我的这个错误:

代码如下:

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

有人知道这个错误是什么意思吗?

【问题讨论】:

【参考方案1】:

Stack&amp; operator = (const&amp; Stack) 应该是Stack&amp; operator = (const Stack&amp;)

您不能拥有指向引用或引用数组或任何东西的指针,因此编译器认为&amp; 必须结束声明的类型部分,并且后面的Stack 必须是参数名称。但是const&amp; 中没有类型,因此编译器说您不能在没有类型的情况下声明参数Stack。在旧版本的 C 中,类型 int 有时会在可能出现但被省略的类型的上下文中推断出来,这就是错误谈到 ISO C++ 禁止这样做的原因。

【讨论】:

int pop()throw(length_error) 可能有问题,因为我也收到错误消息:“'length-errror' 之前的预期类型说明符”? @henryjoseph:我猜你的意思是length_errorlength_error 在 std 命名空间中,所以你需要 throw(std::length_error) 虽然我建议避免像这样的动态异常规范。它们已被弃用。

以上是关于ISO C++ 禁止声明没有类型的“堆栈”的主要内容,如果未能解决你的问题,请参考以下文章

如何调试“ISO C++ 禁止声明没有类型的‘汽车’”?

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

错误帮助:ISO C++ 禁止声明没有类型的“向量”

C++ 变量未在范围内声明

C++ 中的共存类

C++ 结构体的声明