![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Помогите, плиз, вынести классы в отдельные файлы. |
|
C/C++ - [решено] Помогите, плиз, вынести классы в отдельные файлы.
|
![]() Ветеран Сообщения: 1328 |
Сабж. Сейчас программа выглядит так:
//virtual.h class One { public: One(){}; virtual ~One(); virtual void TellMe()=0; protected: private: }; class Two: public One { public: ~Two(); virtual void TellMe(); protected: private: }; class Three: public One { public: ~Three(); protected: virtual void TellMe(); private: }; //virtual.cpp #include "stdafx.h" #include <iostream> #include "virtual.h" using namespace std; One::~One() { cout << "!!!" << endl; } Two::~Two() { cout << "Two::destructor" << endl; } void Two::TellMe() { cout << "Two::TellMe" << endl; } Three::~Three() { cout << "Three::destructor" << endl; } void Three::TellMe() { cout << "Three::TellMe" << endl; } int _tmain(int argc, _TCHAR* argv[]) { const int size=10; One* arrey[size]; for(int i=0; i<size; i+=2) { arrey[i]=new Two; arrey[i+1]=new Three; } Three* temp; for(int i=0; i<size; ++i) { //temp = dynamic_cast<Three*>(arrey[i]); //if(temp!=NULL) //{ // cout << "Three object...\n"; // temp->TellMe(); //} arrey[i]->TellMe(); } cout << endl; for(int i=0; i<size; ++i) { delete arrey[i]; } cout << endl; int y; cin >> y; return 0; } //One.h class One { public: One(){}; virtual ~One(); virtual void TellMe()=0; protected: private: }; //One.cpp #include <iostream> #include "One.h" using namespace std; One::~One() { cout << "!!!" << endl; } //Two.h #include "One.h" class Two: public One { public: ~Two(); virtual void TellMe(); protected: private: }; //Two.cpp #include <iostream> #include "Two.h" using namespace std; Two::~Two() { cout << "Two::destructor" << endl; } void Two::TellMe() { cout << "Two::TellMe" << endl; } //Three.h #include "One.h" class Three: public One { public: ~Three(); virtual void TellMe(); protected: private: }; //Three.cpp #include <iostream> #include "Three.h" using namespace std; Three::~Three() { cout << "Three::destructor" << endl; } void Three::TellMe() { cout << "Three::TellMe" << endl; } //virtual.cpp #include "stdafx.h" #include <iostream> #include "One.h" #include "Two.h" #include "Three.h" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { const int size=10; One* arrey[size]; for(int i=0; i<size; i+=2) { arrey[i]=new Two; arrey[i+1]=new Three; } //Three* temp; for(int i=0; i<size; ++i) { //(dynamic_cast<Three*>(arrey[i]))->TellMe(); //temp = dynamic_cast<Three*>(arrey[i]); //if(temp!=NULL) //{ // cout << "Three object...\n"; // temp->TellMe(); //} arrey[i]->TellMe(); } //Three test; //test.TellMe(); cout << endl; for(int i=0; i<size; ++i) { delete arrey[i]; } cout << endl; int y; cin >> y; return 0; } P.S: Использую Visual Studio 2010. |
|
------- Отправлено: 13:52, 05-06-2010 |
![]() Ветеран Сообщения: 1328
|
Профиль | Отправить PM | Цитировать Проблема решена. Для этого потребовалось сделать следующее:
1) В файлах Two.h и Three.h заменил инклюд файла One.h на объявление: class One; 2) Учел особенности работы Visual Studio; проинклюдил все свои заголовочные файлы и файл iostream в файле stdafx.h, а из своих cpp-файлов эти инклюды убрал, заменив на инклюд stdafx.h. |
------- Отправлено: 17:26, 05-06-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать ещё бы хотелось узнать какие именно ошибки лезут. Если о том, что классы уже определены, то:
сборка программы на с/с++ состоит из 3х этапов: 1. препроцессинг, 2. комлиляция 3. связывание (linking). На певом этапе: 1. весь текст собираемого модуля сливается в один файл (#include) в одну строчку 2. выполняются директивы препроцессора по замене текста #define 3. удаляются комментарии 4. раскрываются так называемые триграфы 5. соединяются строчные константы, разделённые пробелами "sd\nfds" "123" -> "sd<код символа \n>fds123" допустим есть 3 файла: после препроцессинга 3.cpp вместо #include будет содержимое указанных файлов, т.е. такой код не проглотится компилятором, потому что переопределяется переменная a. Чтобы не было таких подвохов, используют хитрость: теперь после первого включения 1.h препроцессор запомнит значение 1_H и (следуя инструкции #ifndef) будет в следующий раз пропускать содержимое этого файла. Сделай то же самое, и у тебя заработает |
Отправлено: 17:38, 05-06-2010 | #3 |
![]() Ветеран Сообщения: 1328
|
Профиль | Отправить PM | Цитировать pva
Цитата:
|
|
------- Отправлено: 18:11, 05-06-2010 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать pva, Красиво объяснил.
![]() ![]() Цитата pva:
|
||
------- Отправлено: 18:15, 05-06-2010 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Помогите плиз!!!! | rum777 | Программирование в *nix | 1 | 04-05-2009 12:35 | |
Помогите плиз | Paagrio | Мобильные ОС, смартфоны и планшеты | 2 | 01-05-2008 20:27 | |
помогите плиз | tair | Непонятные проблемы с Железом | 17 | 08-02-2006 15:53 | |
Установленный c нуля WinME (engl) не читает прежние русские файлы. Хелп, плиз | ab | Microsoft Windows 95/98/Me (архив) | 16 | 10-05-2005 23:35 | |
Помогите плиз! | MelouN | Вебмастеру | 2 | 06-10-2003 14:48 |
|