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

Подключение к main.cpp заголовочных файлов с классами - C++

Восстановить пароль Регистрация
 
iga7013
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 38
21.01.2014, 21:39     Подключение к main.cpp заголовочных файлов с классами #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
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
#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
#include "student.h"
using namespace std;
 
class Student
{
    public:
        string name;
        int year;
        string address;
        string telephone;
        string faculty;
        int course;
};
 
const int N = 20;
 
void getStudentsFaculty( Student *a, int n, string fac )
{
    for( int index = 0; index < n; ++index )
        if ( a[ index ].faculty == fac )
            cout << a[ index ].name << endl;
}
 
void getListStudents( Student *a, int n )
{
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].faculty > a[ j ].faculty )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].faculty != a[ i - 1 ].faculty ) )
cout << a[ i ].faculty << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
cout << "\n=======================================\n" << endl;
 
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].course > a[ j ].course )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].course != a[ i - 1 ].course ) )
cout << a[ i ].course << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
}
 
void getStudentsAfterYear( Student *a, int n, int y)
{
    int count = 0;
    for( int index = 0; index < n; ++index )
        if ( a[ index ].year > y )
        {
            ++count;
            cout << a[ index ].name << endl;
        }       
        if ( !count )
        cout << "Are absent!" << endl;
}
 
int main()
{
    Student arr[ N ];
 
    int size;
    cout << "Size : ";
    cin >> size;
 
    for( int i = 0; i < size; ++i )
    {
        cout << "Name: ";
        cin >> arr[ i ].name;
        cout << "Year: ";
        cin >> arr[ i ].year;
        cout << "Address: ";
        cin >> arr[ i ].address;
        cout << "Telephone: ";
        cin >> arr[ i ].telephone;
        cout << "Faculty: ";
        cin >> arr[ i ].faculty;
        cout << "Course: ";
        cin >> arr[ i ].course;
        cout << "==============================" << endl;
    }
 
    string fac;
    cout << "Faculty: ";
    cin >> fac;
 
    getStudentsFaculty( arr, size, fac );
 
    getListStudents( arr, size );
 
    int year;
    cout << "Year: ";
    cin >> year;
    getStudentsAfterYear( arr, size, year );
    _getch();
    return 0;
}


Нужно файл класса вынести в отдельный Studtnt.h и Student.cpp. Никак не могу понять как это сделать. Просто подключить несколько файлов к проекту могу, но если там обычные функции, а класс никак не видит.
Там что-то связано с указателем "this->", но никак не может до меня дойти что да как.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 21:39     Подключение к main.cpp заголовочных файлов с классами
Посмотрите здесь:

C++ Подключение заголовочных файлов
Подключение заголовочных файлов C++
C++ Перекрестное подключение заголовочных файлов
Подключение заголовочных файлов. C++
Подключение заголовочных файлов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 22:01     Подключение к main.cpp заголовочных файлов с классами #2
В чём сложность непонятно... Вот это и прототипы функций - в .h:
C++
1
2
3
4
5
6
7
8
9
10
class Student
{
    public:
        string name;
        int year;
        string address;
        string telephone;
        string faculty;
        int course;
};
Реализации функций - в .cpp. Подлкючить, в этом .cpp и в main.cpp, .h файл с классом и прототипами функций. Добавить .cpp, с реализациями функций, в проект.
iga7013
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 38
21.01.2014, 22:02  [ТС]     Подключение к main.cpp заголовочных файлов с классами #3
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём сложность непонятно...
Растолкал я их туда:
student.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
#pragma once
#include <string>
class student
{
private:
    std::string name;
    int year;
    std::string address;
    std::string telephone;
    std::string faculty;
    int course;
public:
    student(){};
    ~student(){};
    void set_name(std::string);
    std::string get_name();
    void set_year(int);
    int get_year();
    void set_address(std::string);
    std::string get_address();
    void set_telephone(std::string);
    std::string get_telephone();
    void set_faculty(std::string);
    std::string get_faculty();
    void set_course(int);
    int get_course();
};


student.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
#include "student.h"
#include <iostream>
#include <string>
void student::set_name(std::string p_name)
{
    name=p_name;
}
std::string student::get_name()
{
    return name;
}
//----------------------------------------
void student::set_year(int p_year)
{
    year=p_year;
}
int student::get_year()
{
    return year;
}
//----------------------------------------
void student::set_address(std::string p_address)
{
    address=p_address;
}
std::string student::get_address()
{
    return address;
}
//----------------------------------------
void student::set_telephone(std::string p_telephone)
{
    telephone=p_telephone;
}
std::string student::get_telephone()
{
    return telephone;
}
//----------------------------------------
void student::set_faculty(std::string p_faculty)
{
    faculty=p_faculty;
}
std::string student::get_faculty()
{
    return faculty;
}
//----------------------------------------
void student::set_course(int p_course)
{
    course=p_course;
}
int student::get_course()
{
    return course;
}
//----------------------------------------

Но как только комментирую класс в main.cpp оно с ума сходит =\
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 22:13     Подключение к main.cpp заголовочных файлов с классами #4
Вот это класс в первом посте:
C++
1
2
3
4
5
6
7
8
9
10
class Student
{
    public:
        string name;
        int year;
        string address;
        string telephone;
        string faculty;
        int course;
};
Вот это класс в третьем посте:
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
class student
{
private:
    std::string name;
    int year;
    std::string address;
    std::string telephone;
    std::string faculty;
    int course;
public:
    student(){};
    ~student(){};
    void set_name(std::string);
    std::string get_name();
    void set_year(int);
    int get_year();
    void set_address(std::string);
    std::string get_address();
    void set_telephone(std::string);
    std::string get_telephone();
    void set_faculty(std::string);
    std::string get_faculty();
    void set_course(int);
    int get_course();
};
Какое отношение первый класс имеет ко второму?
iga7013
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 38
21.01.2014, 22:25  [ТС]     Подключение к main.cpp заголовочных файлов с классами #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Какое отношение первый класс имеет ко второму?
Первый пост, это работающая программа, но класс описан внутри main.cpp и его поля со спецификатором доступа "public"
В третьем посте, этот тот же класс, только уже находится в файле student.h и с в ручную прописанным конструктором и функциями доступа к закрытым полям (private...)


сейчас все выглядит вот так:

source.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 <iostream>
#include <string>
#include <fstream>
#include <conio.h>
#include "student.h"
using namespace std;
void getStudentsFaculty (student ,int, string);
void getListStudents (student,int);
void getStudentsAfterYear( student , int , int );
const int N = 20;
 
void getStudentsFaculty( student *a, int n, string fac )
{
    for( int index = 0; index < n; ++index )
        if ( a[ index ].faculty == fac )
            cout << a[ index ].name << endl;
}
 
void getListStudents( student *a, int n )
{
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].faculty > a[ j ].faculty )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].faculty != a[ i - 1 ].faculty ) )
cout << a[ i ].faculty << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
cout << "\n=======================================\n" << endl;
 
for( int i = 0; i < n - 1; ++i )
for( int j = i + 1; j < n; ++j )
if ( a[ i ].course > a[ j ].course )
{
Student temp = a[ i ];
a[ i ] = a[ j ];
a[ j ] = temp;
}
for( int i = 0; i < n; ++i )
{
if ( i == 0 || ( i > 0 && a[ i ].course != a[ i - 1 ].course ) )
cout << a[ i ].course << " : " << endl;
cout << "\t" << a[ i ].name << endl;
}
}
 
void getStudentsAfterYear( student *a, int n, int y)
{
    int count = 0;
    for( int index = 0; index < n; ++index )
        if ( a[ index ].year > y )
        {
            ++count;
            cout << a[ index ].name << endl;
        }       
        if ( !count )
        cout << "Are absent!" << endl;
}
 
int main()
{
    student arr[ N ];
 
    int size;
    cout << "Size : ";
    cin >> size;
 
    for( int i = 0; i < size; ++i )
    {
        cout << "Name: ";
        cin >> arr[ i ].name;
        cout << "Year: ";
        cin >> arr[ i ].year;
        cout << "Address: ";
        cin >> arr[ i ].address;
        cout << "Telephone: ";
        cin >> arr[ i ].telephone;
        cout << "Faculty: ";
        cin >> arr[ i ].faculty;
        cout << "Course: ";
        cin >> arr[ i ].course;
        cout << "==============================" << endl;
    }
 
    string fac;
    cout << "Faculty: ";
    cin >> fac;
 
    getStudentsFaculty( arr, size, fac );
 
    getListStudents( arr, size );
 
    int year;
    cout << "Year: ";
    cin >> year;
    getStudentsAfterYear( arr, size, year );
    _getch();
    return 0;
}

student.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
#pragma once
#include <string>
class student
{
private:
    string name;
    int year;
    string address;
    string telephone;
    string faculty;
    int course;
public:
    student(){};
    ~student(){};
    void set_name(string);
    string get_name();
    void set_year(int);
    int get_year();
    void set_address(string);
    string get_address();
    void set_telephone(string);
    string get_telephone();
    void set_faculty(string);
    string get_faculty();
    void set_course(int);
    int get_course();
};

student.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
#include "student.h"
#include <iostream>
#include <string>
using namespace std;
void student::set_name(string p_name)
{
    name=p_name;
}
string student::get_name()
{
    return name;
}
//----------------------------------------
void student::set_year(int p_year)
{
    year=p_year;
}
int student::get_year()
{
    return year;
}
//----------------------------------------
void student::set_address(string p_address)
{
    address=p_address;
}
string student::get_address()
{
    return address;
}
//----------------------------------------
void student::set_telephone(string p_telephone)
{
    telephone=p_telephone;
}
string student::get_telephone()
{
    return telephone;
}
//----------------------------------------
void student::set_faculty(string p_faculty)
{
    faculty=p_faculty;
}
string student::get_faculty()
{
    return faculty;
}
//----------------------------------------
void student::set_course(int p_course)
{
    course=p_course;
}
int student::get_course()
{
    return course;
}
//----------------------------------------


Отношения никакого, это один и тот же класс, просто записан дважды.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.01.2014, 22:46     Подключение к main.cpp заголовочных файлов с классами #6
Цитата Сообщение от iga7013 Посмотреть сообщение
Отношения никакого, это один и тот же класс, просто записан дважды.
Один и тот же? В одном ни одного метода, а в другом четырнадцать? И это - один и тот же класс? Вы уж, как-нибудь, разберитесь со своими классами и кодами, прежде чем тему создавать.
Yandex
Объявления
21.01.2014, 22:46     Подключение к main.cpp заголовочных файлов с классами
Ответ Создать тему
Опции темы

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