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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
diverlin
1 / 1 / 0
Регистрация: 27.04.2011
Сообщений: 7
#1

Как скомпилировать два класса, которые используют методы друг друга - C++

28.04.2011, 00:28. Просмотров 831. Ответов 3
Метки нет (Все метки)

Доброго времени суток.

имеется 3 файлика:
asteroid.cpp
starsystem.cpp
main.cpp


в main.cpp файлики инкудятся в следующем порядке
C++
1
2
#include "asteroid.cpp"
#include "starsystem.cpp"
в asteroid.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class starSystemInstance; // эта строчка нужна чтоб обяснить asteroid.cpp о существовании типа класса starSystemInstance
 
class asteroidInstance 
{
 public:
         starSystemInstance* pTo_StarSystem;
         bool is_alive;
 
 asteroidInstance(starSystemInstance* _pTo_StarSystem)
 { 
      pTo_StarSystem = _pTo_StarSystem;
     is_alive = true;
 }
 
  void hit()
 {
  is_alive == false;
  (*pTo_StarSystem).addExplosion();
 }
 
};
typedef std::vector<asteroidInstance*> VEC_pAsteroidInstance_type;
в starsystem.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class starSystemInstance
{
  public:
    VEC_pAsteroidInstance_type asteroidInstance_pList;
    VEC_pAsteroidInstance_type asteroidInstance_pList_removeQueue;
 
  starSystemInstance()
  { }
 
   void addExplosion()
 { //делается взрыв
 }
};
проблема в том что asteroid.cpp, зная о существовании starSystemInstance класса/типа, не знает о методах этого класса.
Ошибка компиляции
asteroid.cpp:133: error: invalid use of incomplete type ‘struct starSystemInstance’
effects.cpp:111: error: forward declaration of ‘struct starSystemInstance’
если я ставлю в asteroid.cpp
C++
1
#include "starsystem.cpp"
то у меня получается хаос(много ошибок).

Как решить проблему?

PS: знаю что можно не изворачиватся так и обойти данное требование, но для меня этот пример сократит программу и улучшит читаемость, хотелось бы разобраться.

Дополнение:
пробовал с extern
C++
1
extern void starSystemInstance.addExplosion(float, float, int);
в начало файла asteroid.cpp, компиляция даёт
asteroid.cpp:4: error: expected initializer before ‘.’ token
погуглил, и вроде(если я правильно понял) пишут что extern не может быть применен к уровню функций-методов класса.

Сильно не ругайте(в C++ новичёк, пришёл с питона), гуглил и здался.

Зараннее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.04.2011, 00:28     Как скомпилировать два класса, которые используют методы друг друга
Посмотрите здесь:

Два класса, вызывающие друг друга C++
Расставить 8 ферзей на шахматной доске 8 на 8, которые не бьют друг друга C++
C++ Два класса, требующих друг друга
Найти N первых пар простых чисел, которые отличались бы друг от друга на 2 C++
C++ Разнести данные и методы в два разных класса
C++ Определить, как расположены треугольники относительно друг друга
В 2х классах указатели друг на друга C++
C++ Как позволить функциями видеть друг друга?
C++ Как сделать чтобы авто не наезжали друг на друга и не столкнулись
C++ Разместить флажки на прямой как можно дальше друг от друга
Как перемножить элементы в двумерном массиве друг на друга? C++
C++ Раздельная компиляция: как быть, если код не компилируется, так как два файла подключают друг друга?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений М.
1034 / 975 / 53
Регистрация: 28.02.2010
Сообщений: 2,818
Завершенные тесты: 2
28.04.2011, 04:35     Как скомпилировать два класса, которые используют методы друг друга #2
Попробуйте описания классов всунуть в *.h файлы, а методы - в *.cpp файлы (имена файлов без расширений должны быть одинаковыми).

Цитата Сообщение от diverlin Посмотреть сообщение
проблема в том что asteroid.cpp ...
Ставте в asteroid.cpp:
C++
1
#include "starsystem.h"
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.04.2011, 16:03     Как скомпилировать два класса, которые используют методы друг друга #3
Цитата Сообщение от diverlin Посмотреть сообщение
main.cpp файлики инкудятся в следующем порядке
Не стоит файлы реализации инклюдить.
diverlin
1 / 1 / 0
Регистрация: 27.04.2011
Сообщений: 7
28.04.2011, 23:30  [ТС]     Как скомпилировать два класса, которые используют методы друг друга #4
проблему решил, спасибо
Yandex
Объявления
28.04.2011, 23:30     Как скомпилировать два класса, которые используют методы друг друга
Ответ Создать тему
Опции темы

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