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

не могу связать 2 файла через интерфес - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Работа с файлами и строками. http://www.cyberforum.ru/cpp-beginners/thread293014.html
Помогите пожалуйста найти ошибку. В расшифрованном тексте выводит какие-то крякозябры. Программа должна расшифровать закодированный таким образом текст : одной букве присваивается другая. # include <iostream.h> # include <fstream.h> # include <string.h> # include <conio.h> # include <stdlib.h> # include <stdio.h> # include <graphics.h>
C++ Линейные, цикл с пред- и постусловием, и цыкл с ветвлением первая задачка (решение с помощью линейного программирования) вторая задачка (решение с помощью цикла с пред- и постусловием) третья задачка (решение с помощью цикла с ветвлениями) Заранее очень благодарен! http://www.cyberforum.ru/cpp-beginners/thread293011.html
C++ Строковые данные
Всем привет) Задание: "Удалить из текста слова, которые заканчиваются на а." Вот написал самое начало, не могу понять как искать эти слова в строке? #include "stdafx.h" #include <iostream> #include <cstdio> using mamespace std; void main() {char text
C++ Поиск пол/отр элементов. Матрицы, динам. память.
Не очень дружу с с++, для допуска :( надо написать программу (с использованием динамической памяти) В матрице как положительные,так и отрицательные элементы.Если отрицательных элементов больше половины,то значение элементов четных строк удвоить, в противном случае удвоить значения элементов только последнего столбца. Буду премного благодарен.
C++ Функция, Указатели, Строки http://www.cyberforum.ru/cpp-beginners/thread292983.html
Уважаемые програмисты требуется помощ в решении задач . По теме <<Функция>> 1.Написать функцию, которая возвращает значение «истина», если заданное шестизначное число является «счастливым» билетом, «ложь» - в противном случае. По теме <<Указатели>> 1.Дано два одномерных массива. Соединить их в третий массив, чередуя элементы первого и второго массивов. По теме <<Строки>>
C++ удалить из массива повторяющиеся элементы, оставив только их первые вхождения. класс-контейнер вектор Добрый день!!! Не могли бы помочь написать программу на С++ при помощи класса-контейнера вектора. вот код)) Заранее спасибо! #include <iostream> using namespace std; int main() { int n; cout<<"n="; cin>>n; int a; подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5765 / 3414 / 255
Регистрация: 08.02.2010
Сообщений: 7,430
12.05.2011, 18:30     не могу связать 2 файла через интерфес
Как я понял, ты хочешь, чтобы твой стек мог хранить элементы произвольного типа. Тогда тебе нужно почитать про шаблоны. Вот пример шаблонного стека:

stack.hpp:
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#ifndef SAMPLE_STACK_HPP
#define SAMPLE_STACK_HPP
 
#include <cstdlib>
#include <stdexcept>
 
namespace sample
{
    // Определение шаблонного класса узла стека
    template <class T>
    struct node
    {
    node<T>* pnext;
    T value;
    node(const T&);
    node(const T&, node<T>*);
    };
 
    template <class T>
    node<T>::node(const T& val)
    : pnext(NULL), value(val)
    {
    }
 
    template <class T>
    node<T>::node(const T& val, node<T>* pn)
    : pnext(pn), value(val)
    {
    }
    
    // Определение шаблонного класса стека
    template <class T>
    class stack
    {
    protected:
    node<T>* ptop;
    size_t sz;
    public:
    stack();
    ~stack();
    
    void push(const T&);
    void pop();
    
    T& top();
    const T& peek() const;
    
    bool empty() const;
    size_t size() const;
    };
 
    template <class T>
    stack<T>::stack()
    : ptop(NULL), sz(0)
    {
    }
 
    template <class T>
    stack<T>::~stack()
    {
    while(ptop)
    {
        node<T>* pnode = ptop;
        ptop = ptop->pnext;
        delete pnode;
        pnode = NULL;
    }
    sz = 0;
    }
    
    template <class T>
    void stack<T>::push(const T& val)
    {
    node<T>* pnode = new node<T>(val, ptop);
    ptop = pnode;
    ++sz;
    }
 
    template <class T>
    void stack<T>::pop()
    {
    if(sz == 0)
        throw std::runtime_error("stack is empty");
 
    node<T>* pnode = ptop;
    ptop = ptop->pnext;
    delete pnode;
    pnode = NULL;
    --sz;
    }
 
    template <class T>
    T& stack<T>::top()
    {
    if(sz == 0)
        throw std::runtime_error("stack is empty");
 
    return ptop->value;
    }
 
    template <class T>
    const T& stack<T>::peek() const
    {
    if(sz == 0)
        throw std::runtime_error("stack is empty");
 
    return ptop->value;
    }
 
    template <class T>
    bool stack<T>::empty() const
    {
    return sz == 0;
    }
 
    template <class T>
    size_t stack<T>::size() const
    {
    return sz;
    }
}
 
#endif
main.cc:
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
#include <iostream>
#include "stack.hpp"
 
int main()
{
    
    sample::stack<int> istack;  // Стек, хранящий целые числа
    sample::stack<char> cstack; // Стек, хранящий символы
 
    const char* str = "stack";
 
    std::cout << "Stack of integers:" << std::endl;
    
    for(int i = -2; i <=2; ++i)
    {
    std::cout << "Pushing element " << i << std::endl;
    istack.push(i);
    }
    
    while(!istack.empty())
    {
    std::cout << "Poping element " << istack.peek() << std::endl;
    istack.pop();
    }
    std::cout << std::endl
          << "Stack of characters:" << std::endl;
    
    while(*str)
    {
    std::cout << "Pushing element " << *str << std::endl;
    cstack.push(*str++);
    }
 
    while(!cstack.empty())
    {
    std::cout << "Poping element " << cstack.peek() << std::endl;
    cstack.pop();
    }
    
    return 0;
}
И еще, обрати внимание: для инициализации и очистки объектов определяемых классов существуют специальные методы, которые неявно вызываются при создании объекта и при его удалении (т.е. при достижении конца контекста существования объекта или при вызове оператора delete для объекта), - это контрукторы (см. методы stack(), node(const T&), node(const T&, node<T>*) и деструкторы (см. методы ~stack() и ~node()). У этих методов отсутствует возвращаемое значение; имена конструкторов и деструкторов должно совпадать с именем класса, только у деструктора перед именем класса стоит символ "`" (тильда). Конструкторов может быть несколько (см. класс node), и они могу принимать различное число параметров, деструктор может быть только один, причем он не должен принимать параметров.
Преимущество использования конструкторов и деструкторов в том, что для статических объектов класса они вызываются автоматически, что избавляет программиста от контроля за корректным и своевременным выделением и освобождением памяти для полей объекта (к примеру, ты в своем примере забыл вызвать метов cleanup(), что в более сложной программе могло привести к серьезной (и трудноуловимой) ошибке, связанной с утечками памяти)
 
Текущее время: 11:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru