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

как вынести класс в отдельный файл? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.69
AnreyKazakov
Заблокирован
20.10.2012, 09:34     как вынести класс в отдельный файл? #1
сделал простенький класс
листинг класса cool

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
class cool
    {
    public:
    cool();
    int ga();
    int gb();
    void sa(int _a);
    void sb(int _b);
    private:
    int a;
    int b;  
    };
    
cool::cool():a(10),b(5){}   
 
int cool::ga()
    {
    return a;
    }
    
int cool::gb()
    {
    return b;   
    }
    
void cool::sa(int _a)
    {
    a=_a;   
    }
    
void cool::sb(int _b)
    {
    b=_b;
    }

сохранил его как cool.cpp
подключил в заголовке
#include "cool.cpp"
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include "cool.cpp"
using namespace std;
int main()
    {
    cool cool1;
    cout<<ga()<<" "<<gb()<<endl;    
    return 0;
    }
Почему-то выдает ошибку, в чем может быть проблема?
как вынести класс в отдельный файл?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AnreyKazakov
Заблокирован
20.10.2012, 09:37  [ТС]     как вынести класс в отдельный файл? #2
Тфу е-мае, пол часа компьютер пытал, только написал, сразу ошибку увидел
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
20.10.2012, 09:44     как вынести класс в отдельный файл? #3
Я так понимаю cool.cpp еще и в проект включен? Есть несколько вариантов решения:
1. Убрать файл из проекта и компилировать в таком виде как сейчас (не совсем правильно)
2. Вынести объявление класса в хедер и подключить его вместо cool.cpp, т.е. вот так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// cool.h
// это нужно убрать из .cpp файла
class cool
    {
    public:
    cool();
    int ga();
    int gb();
    void sa(int _a);
    void sb(int _b);
    private:
    int a;
    int b;  
    };
и вместо
C++
1
#include "cool.cpp"
писать
C++
1
#include "cool.h"
3. убрать объявление класса из .cpp и написать его в 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
#include <iostream>
using namespace std;
 
class cool
    {
    public:
    cool();
    int ga();
    int gb();
    void sa(int _a);
    void sb(int _b);
    private:
    int a;
    int b;  
    }
 
int main()
    {
    cool cool1;
    cout<<ga()<<" "<<gb()<<endl;    
    return 0;
    }
а да, еще методы нужно вызывать так
C++
1
cout<<cool1.ga()<<" "<<cool1.gb()<<endl;
Михаил Свинцов
2 / 2 / 0
Регистрация: 30.09.2012
Сообщений: 58
20.10.2012, 09:46     как вынести класс в отдельный файл? #4
вместо
C++
1
cout<<ga()<<" "<<gb()<<endl;
пиши
C++
1
cout<<cool1.ga()<<" "<<cool1.gb()<<endl;
т.к. это функции-члены класса cool и к ним можно обращаться только через экземпляр класса коим является cool1

и совет: все переменные класса объявляй в разделе private, тем более что у тебя есть функции для получения и записи в эту пременную
AnreyKazakov
Заблокирован
20.10.2012, 14:40  [ТС]     как вынести класс в отдельный файл? #5
Цитата Сообщение от Kastaneda Посмотреть сообщение
cool.cpp еще и в проект включен?
Спасибо наиогромнейшее, слышал кстате такое, но тк решал только небольшие примеры то не нужно было... пропускал мимо ушей.... или глаз.... А сечас как раз нужно...
Цитата Сообщение от Михаил Свинцов Посмотреть сообщение
к ним можно обращаться только через экземпляр класса
Да я понял уже. Обидно, что вот так мучаешь, мучаешь комп и не понимаешь в чем дело, только на форум выкинешь и как озаряет... Не первый раз уже...
Цитата Сообщение от Михаил Свинцов Посмотреть сообщение
и совет: все переменные класса объявляй в разделе private
Они у меня и так в привате сидят

Добавлено через 4 часа 47 минут
Цитата Сообщение от Kastaneda Посмотреть сообщение
2. Вынести объявление класса в хедер
и подключить его вместо cool.cpp, т.е. вот так
Чет так не получается... как я понял теперь имеется
три файла вместо двух
1.main
листинг main
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include "cool.h"
using namespace std;
int main()
    {
    cool cool1;
    cout<<cool1.ga()<<" "<<cool1.gb()<<endl;    
    return 0;
    }

2. хедер, я не знал как его сотворить поэтому сделал наобум,
т.е. просто сохранил объявление в cool.h
листинг хедера

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include "cool.cpp"
class cool
    {
    public:
    cool();
    int ga();
    int gb();
    void sa(int _a);
    void sb(int _b);
    private:
    int a;
    int b;  
};
(cool.h)
3.файл с функциями-членами класса cool
листинг cool.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "cool.h"
cool::cool():a(10),b(5){}   
 
int cool::ga()
    {
    return a;
    }
    
int cool::gb()
    {
    return b;   
    }
    
void cool::sa(int _a)
    {
    a=_a;   
    }
    
void cool::sb(int _b)
    {
    b=_b;
    }

Но не пашет.... почему-то...

Помогите пож, мне кажется спасение в этом,
а то замучался данные между формами передовать
с десяток переменных extern можно всего одним
классом заменить.....
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4237 / 2770 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
20.10.2012, 16:48     как вынести класс в отдельный файл? #6
в cool.h вот эта строка не нужна
C++
1
#include "cool.cpp"
Yandex
Объявления
20.10.2012, 16:48     как вынести класс в отдельный файл?
Ответ Создать тему
Опции темы

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