Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Классы и раздельная компиляция


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

Вот, к примеру, программа с одним классом. Я создаю три файла:
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, но тоже какую-то ошибку выдает. Помогите, пожалуйста, разобраться. Давно уже мучаюсь с раздельной компиляцией.

Автор: DEM90 16.4.2010, 00:34
А где
Код

#include <foo.cpp>

?
;)

Автор: toxx 16.4.2010, 00:39
Если правильно понял то мб определение класса в .h файл записать
а методы класса в .cpp файл например
Код

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


Код

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


Код

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



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

Автор: toxx 16.4.2010, 00:45
jonie
да надо, не спорю=)

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

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

Автор: sidd 21.4.2010, 19:37
toxx, спасибо. То, что хотел smile

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

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

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


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

#include "..\foo.cpp"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)