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

Классы - C++

Восстановить пароль Регистрация
 
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
07.10.2013, 20:30     Классы #1
Здравствуйте всем! Только начинаю разбираться с классами, по сути первая с ними программа. Проблема вот в чем. В задание нужно сделать структуру в классе. Я ее создал, только не пойму, почему после первого заполнения полей программа вылетает. Должен быть массив объектов класса. Подскажите пожалуйста в чем косяк...
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
#include <iostream>
#include <string>
using namespace std;
 
class TMarsh{
private:
    struct Marsh;
public:
    Marsh *first_trafic;
    TMarsh();
    TMarsh(string, string, int);
    void Set_Begst(string);
    string Get_Begst();
    void Set_Term(string);
    string Get_Term();
    void Set_Num(int);
    int Get_Num();
};
struct TMarsh::Marsh{
    string Begst;
    string Term;
    int Num;
};
TMarsh::TMarsh()
{
    first_trafic=NULL;
}
TMarsh::TMarsh(string start, string end, int number)
{
    Set_Begst(start);
    Set_Term(end);
    Set_Num(number);
}
void TMarsh::Set_Begst(string start)
{
    first_trafic->Begst=start;
}
void TMarsh::Set_Term(string end)
{
    first_trafic->Term=end;
}
void TMarsh::Set_Num(int number)
{
    first_trafic->Num=number;
}
string TMarsh::Get_Begst()
{
    return first_trafic->Begst;
}
string TMarsh::Get_Term()
{
    return first_trafic->Term;
}
int TMarsh::Get_Num()
{
    return first_trafic->Num;
}
int main()
{
    string start, end;
    int number;
    TMarsh *trafic = new TMarsh[3];
    for(int i=0; i<3; i++)
    {
        getline(cin, start);
        getline(cin, end);
        cin>>number;
        trafic[i].Set_Begst(start);
        trafic[i].Set_Term(end);
        trafic[i].Set_Num(number);
        cin.get();
    }
    for (int i=0; i<3; i++)
    {
        cout<<trafic[i].Get_Begst()<<" "<<trafic[i].Get_Term()<<" "<<trafic[i].Get_Num()<<endl;
    }
    return 0;
}
P.s.Если просто в private объявить поля(без структуры), то все работает нормально.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2013, 20:30     Классы
Посмотрите здесь:

Классы C++
Классы C++
C++ КЛАССЫ
C++ Классы
классы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.10.2013, 20:33     Классы #2
кто будет выделять память то?
C++
1
first_trafic = new Marsh
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
07.10.2013, 20:46  [ТС]     Классы #3
Хорошо...кстати я подразумевал что дело в этом, но где мне ее выделить..? В паблике он не хочет выделять, что в принципе и правильно...
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.10.2013, 20:52     Классы #4
уберите указатель
C++
1
2
3
4
///
public:
    Marsh first_trafic;
///
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
07.10.2013, 21:01  [ТС]     Классы #5
К сожалению не помогло...ошибку пишет
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.10.2013, 21:04     Классы #6
ну круто я не компилятор ошибку то написать можно?
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
07.10.2013, 21:10  [ТС]     Классы #7
короче если писать в паблике как Вы написали, то пишет error C2079: "TMarsh::first_trafic" использует неопределенный struct "TMarsh::Marsh"
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.10.2013, 21:15     Классы #8
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
#include <iostream>
#include <string>
using namespace std;
 
class TMarsh{
private:
    struct Marsh
    {
    string Begst;
    string Term;
    int Num;
    };
public:
    Marsh first_trafic;
    TMarsh();
    TMarsh(string, string, int);
    void Set_Begst(string);
    string Get_Begst();
    void Set_Term(string);
    string Get_Term();
    void Set_Num(int);
    int Get_Num();
};
 
TMarsh::TMarsh()
{
    //first_trafic=NULL;
}
TMarsh::TMarsh(string start, string end, int number)
{
    Set_Begst(start);
    Set_Term(end);
    Set_Num(number);
}
void TMarsh::Set_Begst(string start)
{
    first_trafic.Begst=start;
}
void TMarsh::Set_Term(string end)
{
    first_trafic.Term=end;
}
void TMarsh::Set_Num(int number)
{
    first_trafic.Num=number;
}
string TMarsh::Get_Begst()
{
    return first_trafic.Begst;
}
string TMarsh::Get_Term()
{
    return first_trafic.Term;
}
int TMarsh::Get_Num()
{
    return first_trafic.Num;
}
int main()
{
    string start, end;
    int number;
    TMarsh *trafic = new TMarsh[3];
    for(int i=0; i<3; i++)
    {
        getline(cin, start);
        getline(cin, end);
        cin>>number;
        trafic[i].Set_Begst(start);
        trafic[i].Set_Term(end);
        trafic[i].Set_Num(number);
        cin.get();
    }
    for (int i=0; i<3; i++)
    {
        cout<<trafic[i].Get_Begst()<<" "<<trafic[i].Get_Term()<<" "<<trafic[i].Get_Num()<<endl;
    }
    return 0;
}
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
07.10.2013, 21:25  [ТС]     Классы #9
спасибо, вроде работает, не знаю че я тупил...только я не понял, почему с указателем не работает?
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.10.2013, 21:33     Классы #10
C++
1
2
3
4
TMarsh::TMarsh()
{
    first_trafic= new Marsh;
}
и так ?

Добавлено через 1 минуту
и
C++
1
2
3
4
TMarsh:~TMarsh()
{
    delete first_trafic;
}
не забудьте
Only_Loko
 Аватар для Only_Loko
10 / 10 / 0
Регистрация: 20.09.2013
Сообщений: 22
07.10.2013, 21:39  [ТС]     Классы #11
Все, спасибо, разобрался. Ведь изначально я не понимал где выделить память...Не доходило, что в конструкторе.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2013, 22:58     Классы
Еще ссылки по теме:

Классы C++
C++ Классы

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

Или воспользуйтесь поиском по форуму:
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
07.10.2013, 22:58     Классы #12
ну а где еще то?
Yandex
Объявления
07.10.2013, 22:58     Классы
Ответ Создать тему
Опции темы

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