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

Как вынести объявление класса в хедер? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
AnreyKazakov
Заблокирован
20.10.2012, 16:15     Как вынести объявление класса в хедер? #1
Есть некий класс с функц-членами.
набрал в Geany и вынес в отдельный файл cool.cpp
функции-члены этого класса
листинг cool.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
    }

далее, открыл C++Builder 6 file\new\header
и сохранил в этой же папке с именем cool.h
объявление класса cool
(отображается как обычный текстовый файл)
листинг cool.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
class cool
    {
    public:
    cool();
    int ga();
    int gb();
    void sa(int _a);
    void sb(int _b);
    private:
    int a;
    int b;  
};

далее, опять открыл Builder с новым проектом
сохранил пустой проект в эту же папку
добавил
C++
1
2
#include "cool.h"
cool cool1;
листинг проекта в Builder

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <vcl.h>
#include "cool.h"
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
cool cool1;

выдает ошибку, не знаю что делать
Как вынести объявление класса в хедер?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
20.10.2012, 16:42     Как вынести объявление класса в хедер? #2
В фаил cool.cpp добавьте заголовочный фаил
C++
1
#include "cool.h"
AnreyKazakov
Заблокирован
20.10.2012, 16:51  [ТС]     Как вынести объявление класса в хедер? #3
Заработало, когда оба файла
в проекте стал подключать
C++
1
2
#include "cool.h"
#include "cool.cpp"
но это не правильно вроде...
вроде в самом проекте только
"cool.h" должен подключаться

Цитата Сообщение от Croessmah Посмотреть сообщение
В фаил cool.cpp добавьте заголовочный фаил
Не помогает, та же ошибка вылазит
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
20.10.2012, 16:56     Как вынести объявление класса в хедер? #4
а у Вас фаил cool.cpp в проект входит? А то может компилируете тольк unit и все. Кстати, что такое unit.h?
Как вынести объявление класса в хедер?
AnreyKazakov
Заблокирован
20.10.2012, 17:07  [ТС]     Как вынести объявление класса в хедер? #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Кстати, что такое unit.h?
Я не знаю, он автоматом вроде появился

Цитата Сообщение от Croessmah Посмотреть сообщение
а у Вас фаил cool.cpp в проект входит
Нет, не входил, я думал cool.h сам какими-то
магическими комбинациями его в проект затолкает...

То есть, если надо подключить один класс к нескольким
формам в одном проекте алг следущий:
1. делим класс на *.h и *.cpp
2. в главной форме подкл *.h и *.cpp и создаем объект x класса;
3.во всех остальных формах где необходим объект x
подключаем *.h и объявляем extern * x;
правильно я понял?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
20.10.2012, 17:19     Как вынести объявление класса в хедер? #6
Цитата Сообщение от AnreyKazakov Посмотреть сообщение
в главной форме подкл *.h и *.cpp и создаем объект x класса;
только *.h фаил подключается.

Цитата Сообщение от AnreyKazakov Посмотреть сообщение
Нет, не входил, я думал cool.h сам какими-то
магическими комбинациями его в проект затолкает...
Включите фаил *.cpp в проект, иначе он не будет компилироваться
AnreyKazakov
Заблокирован
20.10.2012, 17:29  [ТС]     Как вынести объявление класса в хедер? #7
Цитата Сообщение от Croessmah Посмотреть сообщение
Включите фаил *.cpp в проект, иначе он не будет компилироваться
Все, врубился, спасибо
AnreyKazakov
Заблокирован
20.10.2012, 17:49  [ТС]     Как вынести объявление класса в хедер? #8
Ну вот, чет все равно нифига не прет...

Добавил в файл cool.cpp
C++
1
#include "cool.h";
листинг 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;
    }

Включил файл cool.cpp в project1,
вылазит такая ошибка
Как вынести объявление класса в хедер?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
20.10.2012, 18:02     Как вынести объявление класса в хедер? #9
cool.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef _COOL_H_
#define _COOL_H_
class cool
    {
    public:
    cool();
    int ga();
    int gb();
    void sa(int _a);
    void sb(int _b);
    private:
    int a;
    int b;  
};
#endif
AnreyKazakov
Заблокирован
20.10.2012, 18:14  [ТС]     Как вынести объявление класса в хедер? #10
AllProject.rar - полносый архив, даже с временными файлами
CoolhAndCoolcpp.rar - файлы cool.h и cool.cpp

#ifndef _COOL_H_
если писать такую конструкцию он не видит класс

Как вынести объявление класса в хедер?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11841 / 6820 / 771
Регистрация: 27.09.2012
Сообщений: 16,911
Записей в блоге: 2
Завершенные тесты: 1
20.10.2012, 18:19     Как вынести объявление класса в хедер? #11
уберите из cool.h
строчку
C++
1
#include "cool.cpp"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2012, 18:34     Как вынести объявление класса в хедер?
Еще ссылки по теме:

C++ Как вынести реализацию методов шаблонного класса в отдельный файл?
Вынести реализацию конструктора производного класса C++
C++ вынести функции из класса С++

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

Или воспользуйтесь поиском по форуму:
AnreyKazakov
Заблокирован
20.10.2012, 18:34  [ТС]     Как вынести объявление класса в хедер? #12
Класс, работает!!!
Yandex
Объявления
20.10.2012, 18:34     Как вынести объявление класса в хедер?
Ответ Создать тему
Опции темы

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