Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Классы и раздельная компиляция 
:(
    Опции темы
sidd
Дата 16.4.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть программа, состоящая из нескольких классов, которые находятся между с собой в состоянии агрегации. Хочу сделать, чтоб каждый класс был в отдельном файле. Но так, как я думал, не выходит.

Вот, к примеру, программа с одним классом. Я создаю три файла:
main.h:
Код

#include <iostream>
using namespace std;


foo.cpp:
Код

#include "main.h"

  class Foo {
    // ...
  };


main.cpp:
Код

#include "main.h"

  int main() {

      Foo a;
   
    return 0;
  }


И вот такой makefile:
Код

program: main.cpp foo.cpp
                g++ -o program main.cpp foo.cpp
main.cpp foo.cpp: main.h


При компиляции говорит, что Foo неопределен. Попробовал в заголовочный файл добавить прототип класса Foo, но тоже какую-то ошибку выдает. Помогите, пожалуйста, разобраться. Давно уже мучаюсь с раздельной компиляцией.
PM MAIL WWW ICQ Skype Jabber   Вверх
DEM90
Дата 16.4.2010, 00:34 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А где
Код

#include <foo.cpp>

?
;)
PM MAIL   Вверх
toxx
Дата 16.4.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если правильно понял то мб определение класса в .h файл записать
а методы класса в .cpp файл например
Код

//1.h
class A :
{
    A();
    ~A();
    ....
};


Код

//1.cpp
#include "1.h"
A::A()
{...}
A::~A()
{...}


Код

//main.cpp
#include "1.h"
....
int main()
{...}




Это сообщение отредактировал(а) toxx - 16.4.2010, 00:42
PM MAIL   Вверх
jonie
Дата 16.4.2010, 00:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



toxx, да, можно, но незабывать надо что #pragma once или набор из #ifdef + #define  надо (гугл нагуглит я думаю, если нет, то расскажем)


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


Опытный
**


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

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



jonie
да надо, не спорю=)
PM MAIL   Вверх
Alexeis
Дата 16.4.2010, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Цитата(sidd @  15.4.2010,  23:25 Найти цитируемый пост)
При компиляции говорит, что Foo неопределен. Попробовал в заголовочный файл добавить прототип класса Foo, но тоже какую-то ошибку выдает. Помогите, пожалуйста, разобраться. Давно уже мучаюсь с раздельной компиляцией. 

  Компиляция или линковка? Для компиляции достаточно определения класса (подключения заголовков). Результат компиляции это объектный файл. Но если производиться и линковка, то нужна полная реализация (т.е. в не необходимые объектные файлы)


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
sidd
Дата 21.4.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



toxx, спасибо. То, что хотел smile
PM MAIL WWW ICQ Skype Jabber   Вверх
htzg
Дата 21.4.2010, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



можно так как сказал toxx.
Можно и include в файл с main-функцией
только адрес правильно укажите и кавычки "", а не <>
Пример:
main.cpp находится в С:\Programm\Project
foo.cpp                     в C:\Programm

Первый вариант:
Код

#include "C:\Programm\foo.cpp"


Второй вариант:
Код

#include "..\foo.cpp"

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

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


 




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


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

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