С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
121 / 109 / 29
Регистрация: 18.12.2010
Сообщений: 378

Разбиение на модули

13.05.2013, 10:09. Показов 977. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Прошу вашей помощи. Пишу цепочку классов, один наследуется у другого. В родительском классе есть статические поля. Мне надо разбить эти классы по модулям.

Есть заголовочный файл A.h. Пусть в нём описан абстрактный класс A (без реализации):
C++
1
2
3
#include <iostream>
class A
{...};
от него наследуется класс B. Я пишу примерно так:
B.h:
C++
1
2
3
#include "A.h"
class B : public A
{ /* заголовки */ }
B.cpp
C++
1
2
#include "B.h"
{ /* реализация класса B*/ }
________________
В файл с функцией main() прописываю #include"A.h"
Так вот, это всё прекрасно компилится до тех пор, пока я не попытаюсь создать объект класса B, например:
C++
1
2
3
4
5
6
main()
{
B object_b;
...
return 0;
}
. Тогда мне компилятор жалуется ""object_b" использует неопределённый класс B". Такое ощущение, будто я что-то не туда подключаю. В чём может быть дело?

Добавлено через 17 часов 4 минуты
Я поигрался с инклудами, оказалось, что если в модуль с main() (называется demo) подключить и A, и B:
C++
1
2
#include "A.h"
#include "B.h"
то все работает, объект создаётся, если выкинуть из класса B статическое поле. Но если обратно вернуть в класс статическое поле, ошибка такая:
Code
1
2
error LNK2005: "protected: static unsigned int B::count" (?count@B@@1IA) уже определен в demo.obj
fatal error LNK1169: обнаружен многократно определенный символ - один или более
Я пишу поле так:
Модуль B.h:
C++
1
2
3
4
5
class B : public A
{protected
static int count;
}
int B :: count;
Теперь нужно как-то исправить статическое поле. Не могли бы вы мне помочь?

Добавлено через 46 минут
Всё выяснил.

Первая проблема возникла потому, что я попросту не подключил файл B.h, поэтому и класс B не был виден.
Вторая ошибка - оказывается и модуль demo.cpp, и модуль B.cpp ссылался на B.h, поэтому int B :: count; дважды переопределялся, отсюда и ошибка. Решение: перенёс определение в модуль demo.cpp, который исполняется один раз

Добавлено через 43 секунды
сам спросил - сам ответил
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2013, 10:09
Ответы с готовыми решениями:

Разбиение программы на модули!
Есть большая программа #include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; class mes // AbstractProductA { public: ...

Разбиение кода на модули
Доброго времени суток! Вот есть такое задание. Алгоритмы вычисления s1 и p2 то я написал, но запутался с модулями, как правильно...

Разбиение программы на модули
Добрый день! Пишу довольно крупную для себя программу. Хочется отделить от неё два отдельных файла, в одном были бы одни процедуры, в...

1
18 / 18 / 1
Регистрация: 22.04.2013
Сообщений: 57
13.05.2013, 18:11
Молодец. Мы гордимся такими людьми!
Так держать!
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2013, 18:11
Помогаю со студенческими работами здесь

Разбиение программы на модули
Недавно написал программу, которая на входе получает матрицу, а на выходе - обратная матрица, то есть преобразование. Сначала сделал все в...

Разбиение кода на фунции (модули)
Доброго времени суток. Есть код и его надо разбить на функции (модули).Как это сделать ? Я уже голову сломал об это. Заранее признателен. ...

Разбиение
Здраствуйте. Хотел бы спросить вашего совета есть программа разбивания числа на простые слагаемые к примеру вводим 5 а выдаст ответ: 1 4 /...

Разбиение
Всем доброго времени суток. Условие передам своими словами так как нету конкретного)) Необходимо разбить число на простые числа: скажем...

QR -разбиение
Доброго всем времени суток. У кого есть красиво написанное QR-разложение матриц с помощью преобразования Хаусхолдера? Если не сложно,...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru