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

STL контейнер stack, содержит пользовательский тип данных - C++

Восстановить пароль Регистрация
 
Дев4енка
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 85
12.06.2013, 10:27     STL контейнер stack, содержит пользовательский тип данных #1
Ошибки при компиляции следующего кода:
Файл element.h
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef ELEMENT_H
#define ELEMENT_H
#include <iostream>
using namespace std;
 
class Element
{
    char *Name;
    int Number;
public:
    Element();
    Element(const char*,const int);
    friend ostream& operator <<(ostream&, Element&);
    Element(const Element&);
    Element &operator=(Element&);
    bool operator <(Element&);
    char *GetName() const;  // исправила
    int GetNumber() const;   // исправила
    ~Element();
};
 
#endif // ELEMENT_H

Файл element.cpp
Кликните здесь для просмотра всего текста
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
#include"element.h"
#include<string.h>
#include<QString>
#include<iostream>
#include <ostream>
 
using namespace std;
Element::Element()
{
    Name=new char[8];
    strcpy(Name,"Noname");
    Number=0;
}
Element::Element(const char* _Name,const int _Number){
    Name=new char[strlen(_Name)+1];
    strcpy(Name,_Name);
    Number=_Number;
}
Element::Element(const Element &El){
    Name=new char[strlen(El.GetName())+1];
    strcpy(Name,El.GetName());
    Number=El.GetNumber();
}
Element::~Element()
{
}
 
char *Element::GetName(){
    return Name;
}
int Element::GetNumber(){
    return Number;
}
ostream& operator<<(ostream& ostr,Element& El){
    ostr<<"Имя объекта:"<<El.GetName()<<"Количество:"<<El.GetNumber()<<endl;
    return ostr;
}
Element&Element::operator=(Element&El){
    if(*Name)
    delete[]Name;
    Name=new char[strlen(El.GetName())+1];
    strcpy(Name,El.GetName());
    Number=El.Number;
    return*this;
}
bool Element::operator<(Element&El){
    if(Number<El.Number)
    return true;
    else
    return false;
}

Файл main.cpp
Кликните здесь для просмотра всего текста
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
#include <QtCore/QCoreApplication>
#include "element.h"
#include <iostream>
#include <stack>
using namespace std;
 
void StackOut(stack<Element> TempStack)
{
    do
    {
        cout<<TempStack.top()<<endl;
        TempStack.pop();
    }
    while(TempStack.empty()==false);
    cout<<endl;
}
 
 
stack<Element> StackDel(stack<Element> WorkStack,int from,int count)
{
    stack<Element> TempStack;
    for(int i=0;i<from;i++)
    {
        TempStack.push(WorkStack.top());
        WorkStack.pop();
    }
    for(int i=0;i<count;i++)
        WorkStack.pop();
    do
    {
        WorkStack.push(TempStack.top());
        TempStack.pop();
    }
    while(TempStack.empty()==false);
    return WorkStack;
}
 
 
 
stack<Element> StackAdd(stack<Element> StackTo,stack<Element> StackFrom)
{
    do
    {
        StackTo.push(StackFrom.top());
        StackFrom.pop();
    }
    while(StackFrom.empty()==false);
    return StackTo;
}
 
 
int main()
{
    setlocale(LC_ALL,"RUS");
//-------------------------------------------------------------------------1
    cout<<"       ЗАДАНИЕ 1"<<endl;
    stack<Element> ST1;
    Element el1("a",1), el2("b",1),el3("c",1),el4("d",1),el5("e",1);
    //for(int i=0;i<8;i++)
        //ST1.push((i+1)*0.7);
    ST1.push(el1);
    ST1.push(el2);
    ST1.push(el3);
    ST1.push(el4);
    ST1.push(el5);
    cout<<"ГОТОВО! "<<endl<<endl;
//------------------------------------------------------------------------2
    cout<<"       ЗАДАНИЕ 2"<<endl;
    StackOut(ST1);
    cout<<endl;
//-------------------------------------------------------------------------3     далее закомменчено,т.к. еще начало проги не отлажено
/*    cout<<"       ЗАДАНИЕ 3"<<endl;                    
    ST1.pop();
    ST1.push(7.9);
    StackOut(ST1);
    cout<<endl;
//-------------------------------------------------------------------------4
cout<<"       ЗАДАНИЕ 4"<<endl;
cout<<"НЕВОЗМОЖНО ВЫПОЛНИТЬ Т.К. ДЛЯ СТЕКА НЕВОЗМОЖНО СОЗДАТЬ ИТЕРАТОР!"<<endl<<endl;
//-------------------------------------------------------------------------5
    cout<<"       ЗАДАНИЕ 5"<<endl;
    stack<Element> ST2;
    for(int i=0;i<8;i++)
        ST2.push((i+1)*1.2);
    StackOut(ST2);
    cout<<"ГОТОВО! "<<endl<<endl;
//-------------------------------------------------------------------------6
    cout<<"       ЗАДАНИЕ 6"<<endl;
    ST1=StackDel(ST1,2,2);
    ST1=StackAdd(ST1,ST2);
    cout<<"Первый стек: "<<endl;
    StackOut(ST1);
    cout<<"Второй стек: "<<endl;
    StackOut(ST2);
    ST1=StackDel(ST1,2,2);
    ST1=StackAdd(ST1,ST2);
//-------------------------------------------------------------------------6
    cout<<"       ЗАДАНИЕ 7"<<endl;
    cout<<"Первый стек после перетасовки: "<<endl;
    StackOut(ST1);
    cout<<"Второй стек после перетасовки: "<<endl;
    StackOut(ST2);
 
    cin.get();
    return 0;*/}



Вот ошибки:
C:\Users\Steisi\Desktop\lab10_3_1_oop\main\element.cpp:20: ошибка: C2662: Element::GetName: невозможно преобразовать указатель "this" из "const Element" в "Element &"
В результате преобразования теряются квалификаторы

C:\Users\Steisi\Desktop\lab10_3_1_oop\main\element.cpp:21: ошибка: C2662: Element::GetName: невозможно преобразовать указатель "this" из "const Element" в "Element &"
В результате преобразования теряются квалификаторы


C:\Users\Steisi\Desktop\lab10_3_1_oop\main\element.cpp:22: ошибка: C2662: Element::GetNumber: невозможно преобразовать указатель "this" из "const Element" в "Element &"
В результате преобразования теряются квалификаторы


Упс.Сама исправила(в element.h):

C++
1
2
char *GetName() const;
int GetNumber() const;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2013, 10:27     STL контейнер stack, содержит пользовательский тип данных
Посмотрите здесь:

C++ Пользовательский тип данных для C
C++ Как работать с STL stack
C++ STL stack
C++ ostream_iterator, copy и пользовательский тип данных
C++ Есть ли связь между STL-stack и stack - высокопроизводительная память?
C++ Задача по STL (Создать объект-контейнер, очередь с приоритетом, заполнить ее данными, тип char)
C++ STL. Создать объект-контейнер stack и заполнить его данными типа double
STACK STL C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
12.06.2013, 10:32     STL контейнер stack, содержит пользовательский тип данных #2
C++
1
char *Element::GetName() const {
С GetNumber аналогично.
ЗЫ Используйте std::string вместо char* - меньше головняка будет.
Yandex
Объявления
12.06.2013, 10:32     STL контейнер stack, содержит пользовательский тип данных
Ответ Создать тему
Опции темы

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