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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Скрипт боса http://www.cyberforum.ru/cpp-beginners/thread284879.html
Всем привет. Значит хочу сделать свой сервер мангос, для друзей. Преимущественно серверы мангоса сырые и недоделанные. Хочу чтобы вы мне помогли лутше разобраться с кодом одного босса, вот скрипт: ...
C++ Имеется массив M строк, N столбцов (M и N различны 1. Имеется массив M строк, N столбцов (M и N различны и не менее 5). Ввести элементы, распечатать. Повернуть относительно горизонтальной линии, не создавая дополнительных массивов. Распечатать... http://www.cyberforum.ru/cpp-beginners/thread284853.html
Исправьте, пожалуйста. Односвязный список C++
Создается массив указателей на элемент списка, который ссылается на следующий. добавляю ведомости о спортсменах, но при выводе выводится только последний добавленный элемент. Помогите.#include...
Как перебрать все экземпляры класса? C++
Здравствуйте! Я начинающий программист..... может и не программист вовсе. Но мне необходимо сделать такую задачу. С классами начала работать буквально вчера, когда возникла необходимость сделать...
C++ считывание из файла http://www.cyberforum.ru/cpp-beginners/thread284838.html
писал прогу не могу доделать(((( надо считать все из текстового файла и сделать в структуру struct i_list { char name; char company; char price; char quantity; i_list *next;
C++ Нахождение числа ближнего к X Всем привет) Подскажите, что не так в этом коде? for(i=0; i<n; i++) { for(j=0; j<m; j++) { a=rand()%10; cout<<a<<" "; } ... подробнее

Показать сообщение отдельно
diverlin
1 / 1 / 0
Регистрация: 27.04.2011
Сообщений: 7

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

28.04.2011, 00:28. Просмотров 877. Ответов 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++ новичёк, пришёл с питона), гуглил и здался.

Зараннее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru