Проблема объявления стека C ++ - PullRequest
0 голосов
/ 30 марта 2011

Я пытаюсь объявить стек в моей программе, однако в нем говорится, что я не могу объявить его так, как я пытаюсь.

private:
    stack<tree_node<T>*> s;

Затем я пытаюсь использовать его следующим образом:

 protected:
     s.push(p);

Примечание: в «защищенном» разделе больше кода, но именно отсюда и возникает ошибка.

error: ISO C++ forbids declaration of ‘stack’ with no type

Ответы [ 5 ]

1 голос
/ 30 марта 2011

По крайней мере, в типичном случае, <T> имеет смысл только внутри шаблона, где T объявлен как один из параметров шаблона, что-то вроде:

template<class T>
class whatever // ...
1 голос
/ 30 марта 2011

Проблема в том, что вы опубликовали, состоит в том, что вы пытаетесь вставить голый код в объявление класса.Вы помещаете детали реализации в функцию.

Это неправильно:

class foo{
    int bar;
protected:
    bar = 3;
};

Это правильно:

class foo{
    int bar;
protected:
    void setBar(){ bar = 3; }
]:
0 голосов
/ 30 марта 2011

Когда вы говорите

protected: s.push (p);

Вы имеете в виду, что пытаетесь написать это внутри объявления класса (.hфайл)?Вы уже объявили стек, чтобы использовать его, вы должны сделать это внутри определения функции-члена.

Кроме того, как упоминал Джерри Коффин, если только вы не определили тип "T" для типа пользователя,Вы должны заменить его реальным типом, который вы будете использовать.Или сделайте весь класс шаблоном класса ...

Вы говорите, что у вас есть больше кода в "защищенной" области, возможно, вы должны также опубликовать это и объяснить, что вы пытаетесь достичь.

0 голосов
/ 30 марта 2011

Проблема связана с отсутствием std :: stack.Спасибо!

0 голосов
/ 30 марта 2011

Попробуйте

stack<tree_node<T>>* s;

или вы пытаетесь создать стек указателей узлов дерева?

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