Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: снова борьба с С++, помогите реализовать приёмчик  (Прочитано 1519 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Доброго времени суток.

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

в main.cpp файлики инкудятся в следующем порядке
#include "asteroid.cpp"
#include "starsystem.cpp"

в asteroid.cpp
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
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  
#include "starsystem.cpp" то у меня получается хаос(много ошибок).

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

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

Сильно не ругайте, гуглил и здался.

Зараннее спасибо.
« Последнее редактирование: 28 Апреля 2011, 00:31:18 от amdlintuxos »
что не збудется - позабудется

Оффлайн RazrFalcon

  • O_o
  • Старожил
  • *
  • Сообщений: 3129
  • Zombie Mod
    • Просмотр профиля
    • Я на GitHub
Вопрос: нафига инклудить cpp?
Gentoo + KDE, Official Windows Hater
Хотите помочь нашей вики: https://help.ubuntu.ru/wiki/fixme

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Вопрос: нафига инклудить cpp?
потому что из меня программист как из козы балерина)
переименовал .cpp в .h, но поведение осталось тем же
что не збудется - позабудется

Оффлайн leanid.chaika

  • Новичок
  • *
  • Сообщений: 27
    • Просмотр профиля
Судя по ошибкам, нужна книжка с названием "С++ для чайников" - сам читал ее лет семь назад. )))))

Оффлайн S_F_H

  • Участник
  • *
  • Сообщений: 129
  • Да будет crossplatform!
    • Просмотр профиля
помоему extern решит проблему...
и еще. лучше создать файл заголовков с реализацией, а далее просто подключать к main.cpp

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
помоему extern решит проблему...
может я чего-то недопонимаю, но попробывав подставить
extern void starSystemInstance.addExplosion(float, float, int);в начало файла asteroid.h, компиляция даёт
asteroid.h:4: error: expected initializer before ‘.’ tokenпогуглил, и вроде(если я правильно понял) пишут что extern не может быть применен к уровню функций-методов класса.

проблему не поборол  :-\ еще

и еще. лучше создать файл заголовков с реализацией, а далее просто подключать к main.cpp
учту, спасибо
что не збудется - позабудется

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
amdlintuxos, учи синтаксис. ты можешь очень долго подбирать символы =)
а по существу темы тебе надо как раз наоборот вывернуть программу
(Нажмите, чтобы показать/скрыть)

Кстати, класс классом, а инстанс это экземпляр, его обычно назвыают объектом.

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
Yurror
спасибо большое, работает, буду разбираться.
синтаксис учить конечно надо, не спорю, но в последнее время я много прыгаю с одного на другое, хочется результата, не в терпежь, прийдёт время остановлюсь и начну переосмысливать. Пока что многое непонятно, незнаеш за что хвататься.
Еще раз спасибо за иллюстрирование полного примера "как надо".
что не збудется - позабудется

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Оно не работает! Оно компилируется. Это разные вещи.
Будешь прыгать с одног на другое в голове нифига не останется.
Начинать надо с чистого Си + малость ассемблера в купе с устройством IBM PC и принципами работы микропроцессора + построение компиляторов. там не всё просто но это нужные вещи.

Оффлайн amdlintuxos

  • Автор темы
  • Любитель
  • *
  • Сообщений: 86
    • Просмотр профиля
книги читать полезно никто не спорит, и форумы не нужны, но иногда реалии жизнедеятельности делают так что времени не хватает.
инструмент меняю, потому-что не сразу осознаю что он меня не устраивает, у меня нет цели чтоб что то осталось в голове, у меня есть цель сделать то что я хочу, думаю С++ будет конечной точкой, хотя и возникает желание вернутся назад на питон.

Оно не работает! Оно компилируется. Это разные вещи.
при всём уважении, придирки к словам.
"компиляция работает"
приём - через раз(буду искать ошибку, где-то с векторами наверное накосячил).
ну неверю я что все С++ писатели не имели ошибок на первой неделе своего тернистого пути. и зачитавшись книг 2 года, писали идеально-правильный код.
хотя с психологической стороны мне понятно ваше возмущение, еще один быдлокодер появился и т.д. ведь путь настоящего программиста должен лежать среди настоящих мук книгочтения, у меня были ети муки но в другой области,на еще одну воли наверное не хватит, ловлю удовольствие как могу (ведь для меня это всего лишь - хобби и я хочу чтоб оно ним и осталось)
« Последнее редактирование: 29 Апреля 2011, 20:17:24 от amdlintuxos »
что не збудется - позабудется

Оффлайн S_F_H

  • Участник
  • *
  • Сообщений: 129
  • Да будет crossplatform!
    • Просмотр профиля
уметь писать на с++ уже говорит об относительном отсутствии быдлокода))

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
уметь писать на с++ уже говорит об относительном отсутствии быдлокода))
Ой ли... C++ такое позволяет сотворить...

Оффлайн Упс

  • Старожил
  • *
  • Сообщений: 3231
    • Просмотр профиля
уметь писать на с++ уже говорит об относительном отсутствии быдлокода))
Ой ли... C++ такое позволяет сотворить...
У меня всегда так выходит не зависимо от ЯП. :)
xUbuntu 12.04

Оффлайн S_F_H

  • Участник
  • *
  • Сообщений: 129
  • Да будет crossplatform!
    • Просмотр профиля

Ой ли... C++ такое позволяет сотворить...
[/quote] а прочитать это потом возможно?))

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Прочитать можно. Разрешаю.
По пытаться понять - на твоё усмотрение.

 

Страница сгенерирована за 0.072 секунд. Запросов: 25.