Форум программистов, компьютерный форум CyberForum.ru

Стек, связный список и глупый вопрос - C++

Восстановить пароль Регистрация
 
horrorman
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
03.03.2011, 19:43     Стек, связный список и глупый вопрос #1
Содержание stack.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#include <cstddef> // Определение константы NULL
 
template <typename T> class Stack
{
public:
    Stack();
    Stack(const Stack<T>& aStack);
    ~Stack();
    T pop();    //Выталкиваем элемент из стека
    void Push(T& newItem);
    bool IsEmpty();
    void blabla(){}
private:
    struct Elem{
        T item;
        Elem* next;
    };
    Elem* head;
};
 
template <typename T>
Stack<T>::Stack () : head(NULL)
{
} // Конец конструктора по умолчанию
 
template <typename T>
Stack<T>::Stack(const Stack<T>& aStack)
{
    if (aStack.head == NULL)
        head = NULL; // Исходный список пуст
    else
    {
    // Копируем первый узел
        head = new Elem;
        head->item = aStack.head->item;
        // Копируем остальную часть списка
        Elem *newPtr = head; // Новый указатель на список
        for (Elem *origPtr = aStack.head->next; origPtr != NULL; origPtr = origPtr->next){
            newPtr->next = new Elem;
            newPtr = newPtr->next;
            newPtr->item = origPtr->item;
        } // Конец цикла for
 
        newPtr->next = NULL;
    } // Конец оператора if
} // Конец конструктора копирования
 
template <typename T>
Stack<T>::~Stack()
{
    // Выталкивать элементы, пока стек не станет пустым
    while (IsEmpty())
    pop();
// Диагностическое утверждение: head == NULL
}// Конец деструктора
 
template <typename T>
void Stack<T>::Push(T& newItem)
{
    // Создаем новый элемент
    Elem *newPtr = new Elem;
 
    newPtr->item = newItem;
    // Вставить новый узел
    newPtr->next = head;
    head = newPtr;
} // Конец функции push
 
template <typename T>
bool Stack<T>::IsEmpty()
{
    return head == NULL;
} // Конец функции isEmpty
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stack.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    Stack<int> st();
    st.Push(100);
    st.IsEmpty();
    st.blabla();
    return 0;
}
При компиляции ругается:
Код
/home/horrorman/work/stack_list/main.cpp||In function ‘int main()’:|
/home/horrorman/work/stack_list/main.cpp|9|error: request for member ‘Push’ in ‘st’, which is of non-class type ‘Stack<int>()’|
/home/horrorman/work/stack_list/main.cpp|10|error: request for member ‘IsEmpty’ in ‘st’, which is of non-class type ‘Stack<int>()’|
/home/horrorman/work/stack_list/main.cpp|11|error: request for member ‘blabla’ in ‘st’, which is of non-class type ‘Stack<int>()’|
||=== Build finished: 3 errors, 0 warnings ===|
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.03.2011, 19:43     Стек, связный список и глупый вопрос
Посмотрите здесь:

простой и глупый вопрос C++
Глупый вопрос по указателям? C++
C++ Оч глупый вопрос
Глупый вопрос по шаблонам C++
Извините за глупый вопрос. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ma3a
Эксперт C++
612 / 456 / 31
Регистрация: 28.01.2011
Сообщений: 605
03.03.2011, 19:50     Стек, связный список и глупый вопрос #2
Некорректное объявление
C++
1
Stack<int> st();
В данном случае вы объявляете функцию , возвращающую объект Stack<int>, не принимающую параметров, с названием st. В вашем случае скобки () лишние, объявление переменной должно выглядеть так
C++
1
Stack<int> st;
lemegeton
03.03.2011, 19:59
  #3

Не по теме:

List, stack and a stupid question.
практически
Lock stock and two smoking barrels.

horrorman
2 / 2 / 0
Регистрация: 08.09.2010
Сообщений: 44
03.03.2011, 20:18  [ТС]     Стек, связный список и глупый вопрос #4
Цитата Сообщение от lemegeton Посмотреть сообщение

Не по теме:

List, stack and a stupid question.
практически
Lock stock and two smoking barrels.

Верно подмечено
Yandex
Объявления
03.03.2011, 20:18     Стек, связный список и глупый вопрос
Ответ Создать тему
Опции темы

Текущее время: 15:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru