ISO C ++ запрещает объявление «стека» без типа - PullRequest
4 голосов
/ 22 апреля 2010

Я настроил следующий заголовочный файл, чтобы создать стек, который использует массив. В строке 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 ]

11 голосов
/ 22 апреля 2010

Конструктор и деструктор имеют имя класса, которое ArrayStack, а не Stacker.

9 голосов
/ 22 апреля 2010

Ошибка error: ISO C++ forbids declaration of "<i>identifier</i>" with no type. указывает на то, что объявленный тип идентификатора или идентификатора сам по себе является типом, для которого объявление не найдено.

Например, если вы написали следующее в своем коде:

ArrayStack Stack;

Строка выше выдаст вам такую ​​ошибку, если вы не включите заголовок, в котором "ArrayStack"определены.Вы также получите такую ​​ошибку, если вы случайно использовали Stack вместо ArrayStack (например, при объявлении переменной или при использовании ее в качестве типа возврата функции и т. Д.).Я также должен отметить, что в вашем заголовке есть довольно очевидная ошибка, которую вы, вероятно, хотите исправить;конструктор и деструктор класса должны совпадать с именем класса.Компилятор будет сбит с толку, потому что когда он увидит «Stacker», он будет интерпретировать его как функцию с именем «Stacker», где вы просто забудете дать ему тип возврата (он не поймет, что вы на самом деле имели в видудля того, чтобы быть конструктором, и просто ввел его в заблуждение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...