Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разбитие кода на файлы, Как делать? 
:(
    Опции темы
bassomano
  Дата 30.1.2007, 01:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Люди, помогите. Всю жизнь писал проги все в один большой файл (проги не большие - до пары тройки тысяч строк), а теперь решил попробовать разбить на несколько модулей. Но возникает куча ошибок компилирования...

Объясните, пожалуйста, как это грамотно делается, какие где делать include`ы, как пользоваться extern`ами, как быть с define`ами.

Вот примерная схема:

main.h
Код

#include <windows.h>
#include "resource.h"
#include "c1.h"
#include "c2.h"


#define CONST1    256
#define CONST2    0


HINSTANCE hInstance;
C1 *c1;
C2 *c2;

void Func();


main.cpp
Код

#include "main.h"

void Func()
{
}

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int nCmdShow)
{
    hInstance = hInst;

    c1 = new C1();

    return 0;
}


c1.h
Код

#include <windows.h>


extern void Func();

extern HINSTANCE hInstance;
extern C2 *c2


class C1
{
public:
    C1();
    ~C1();
    HINSTANCE f1() { return hInstance; }
};


c1.cpp
Код

#include "c1.h"

C1::C1()
{
    c2 = new C2(CONST1);
}

C1::~C1()
{
}



c2.h
Код

#include <windows.h>


extern void Func();

extern HINSTANCE hInstance;
extern C1 *c1;


class C2
{
public:
    C2(int);
    ~C2();
};


c2.cpp
Код

#include "c2.h"

C2::C2(HWND hParent, LPRECT rect)
{
    c1->f1();
}

C2::~C2()
{
}


При билде выдаётся куча ошибок.

Это сообщение отредактировал(а) bassomano - 30.1.2007, 01:45
PM MAIL   Вверх
Greeen
Дата 30.1.2007, 02:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 710
Регистрация: 13.8.2006
Где: Петербург

Репутация: нет
Всего: 18



Извини, но это - кошмар..

Цитата(bassomano @  30.1.2007,  01:02 Найти цитируемый пост)
HINSTANCE f1() { return hInstance; }

ты что здесь возвращаешь???

Цитата(bassomano @  30.1.2007,  01:02 Найти цитируемый пост)
#include <windows.h>
extern void Func();
extern HINSTANCE hInstance;
extern C2 *c2

зачем все это?

Цитата(bassomano @  30.1.2007,  01:02 Найти цитируемый пост)
C2 *c2;

указатель не используется
Цитата(bassomano @  30.1.2007,  01:02 Найти цитируемый пост)
c2 = new C2(CONST1);

класс c2 неизвестен этому модулю

тоже самое в c2.h и c2.cpp
товарищч, бери ЛЮБУЮ книжку по С++ и разбирайся.. если лень, создай хотя бы проект в VC посмотри как там...


--------------------
Подпись больше не нужна
PM MAIL ICQ Skype   Вверх
jonie
Дата 30.1.2007, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 7
Всего: 118



в *.h || *.hpp файлы бросать описания определения переменных... уффф.... зряя....
в общем - солидарен с Greeen
и вообще читай там http://forum.vingrad.ru/topic-87958.html

Это сообщение отредактировал(а) jonie - 30.1.2007, 15:41


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
XavierElf
Дата 30.1.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 200
Регистрация: 24.1.2007
Где: г. Тверь

Репутация: нет
Всего: 1



Да, и зачем в каждом заголовке включать Windows.h? Этого вполне достаточно в заголовке главного модуля программы!
--------------------
Даешь открытые исходники!
PM MAIL ICQ   Вверх
bassomano
Дата 30.1.2007, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 19.1.2007

Репутация: нет
Всего: нет



Спасибо за терпение и отсутствие большого количества мата. smile

Greeen, я же написал, что это примерная схема программы. Конечно у меня нет такой функции, как f1. Я просто старался максимально упростить код, выкинув всё лишнее и заменив все названия.
ЛЮБАЯ книжка мне не подходит. Что-то у меня есть, даже читал (!), но там этого не было.

jonie, сцылка не сильно помогла. Это я и так понимаю. smile Потому и прошу объяснить.

XavierElf, я так и думал. Но если я этого не делаю, то получаю 2 сотни ошибок компиляции.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.