|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.08.2012, 12:42 | #1 |
Новичок
Джуниор
Регистрация: 01.08.2012
Сообщений: 8
|
путаница со включениями MinGW
Компилятор MinGW
Доброго времени суток господа! Никак не могу разобраться с одной штуковиной. Дело вот в чем... есть 4 модуля (файла): 1 - main.cpp 2 - class_a.hpp 3 - class_b.hpp 4 - object_a.hpp Затем, я делаю extern class_a object_a в модулях main и class_b. Однако это провацирует ошибку: "build/Release/MinGW-Windows/main.o:main.cpp.text.startup+0xc) : undefined reference to `object_a`" Объект object_a является статичным: #ifndef OBJECT_A_HPP #define OBJECT_A_HPP #include "class_a.hpp" static class_a object_a; #endif В общем цель такая - создать класс, использовать один класс для создания глобального объекта (синглтон). Насколько помню, в других компиляторах такое допустимо. Но MinGW как то рушит все логичное и нелогичное. Если раньше защита типа #ifndef работала в том же borland, то блин в MinGW с этим полный геморой! Поможите добрые люди! |
01.08.2012, 13:01 | #2 |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Может лучше так:
Код:
Код:
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
01.08.2012, 13:11 | #3 |
Новичок
Джуниор
Регистрация: 01.08.2012
Сообщений: 8
|
Про синглтон я утрированно. Смысл не в реализации класса. Смысл в глобальных объектах, которые multiple declaration в случае подключения модуля к нескольким другим модулям. Можно и так записать синглтон, но он будет мультипл в случае если global.hpp я подключу например к двум другим модулям не связанным друг с другом но проецируемых на main в конце.
|
01.08.2012, 13:20 | #4 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Цитата:
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 01.08.2012 в 13:25. |
|
01.08.2012, 13:31 | #5 |
Новичок
Джуниор
Регистрация: 01.08.2012
Сообщений: 8
|
:D Блин, мы не моняли друг друга. Ваш пример не будет. Но дело не в синглтоне. Дело в инклудах. Ладно, забудем про синглтон. Имеется глобальный namespace скажем так, в котором есть несметное кол-во static переменных. Они должны быть видимыми во всех участках программы. Сам namespace описан в отдельном хедере. Там же в этом хедере и дефолтные (нулевые скажем так) объекты, начала всех начал... но это опустим. Сконцентрируемся на переменных. Есть масса переменных, которые должны быть видимы во всех участках программы (в произвольных).
|
01.08.2012, 13:40 | #6 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Почему же?
Цитата:
А object_a.hpp включен в main.cpp?
Знающий не говорит, говорящий не знает (С) Лао Цзы
Последний раз редактировалось Krok27; 01.08.2012 в 13:56. |
|
01.08.2012, 13:56 | #7 |
Новичок
Джуниор
Регистрация: 01.08.2012
Сообщений: 8
|
Krok27, ну в первом же сообщении написано Похоже на троллинг, но буду надеяться на лучшее. Да обжект_а включен в более чем один хедер. И не смотря на #ifndef появляется мультипл декларашн
|
01.08.2012, 14:01 | #8 | |
Форумчанин
Регистрация: 08.07.2010
Сообщений: 505
|
Судя по ошибке, о мультидекларации речи не идет:
Цитата:
Знающий не говорит, говорящий не знает (С) Лао Цзы
|
|
01.08.2012, 14:06 | #9 |
Новичок
Джуниор
Регистрация: 01.08.2012
Сообщений: 8
|
Не идет, не идет. В первом сообщении, миновал мультипл декларашн как отыгранный факт и описал проблемы с экстерном. Тем не менее, вопрос именно об инклудах, название темы "путаница со включениями MinGW" Вы можете мне помочь? Я вроди уже в достаточной мере уточнил вопрос. Вы не подумайте, я не хамлю, но если у вас нет желания отвечать, то в общем то, зачем лишний раз напрягаться тогда А если я что не ясно сказал, могу в общем переозвучить вопрос на новый лад. Вопрос в следующием:
Имеется 4 хедера 1 - main.cpp 2 - class_a.hpp и cpp 3 - class_b.hpp и cpp 4 - object_a.hpp Вариант 1 В 4м модуле имеется static class_a object_a В 1 и 3 модулях имеется #include "object_a.hpp" результат: многовызов конструктора. Вариант 2 аналогичен первому, но object_a не static. результат: мультипл декларайшен Вопрос Каким чудом надо в MinGW сделать хедер с глобальными объектами, что бы тот был доступен в произвольных местах в программе. ДА-ДА-ДА разумеется, в этом хедере могут быть синглтоны, переменные и просто объекты. В случае с переменными - мультипл декларатион. В случае с объектами многовызов конструктора - как факт, создается ровно то количество мертвых new объектов сколько раз включается модуль в другие. В общем полный пипец. Так же, к слову об неадекватности MinGW - вот такой пример описанный последним сообщением в этом форуме, он так же провацирует мультиплдекларайшн, даже не смоторя на #ifndef #define http://www.cyberforum.ru/cpp-beginne...ead295050.html -> это как пример, в какую область мыслить. Последний раз редактировалось roll_eyes; 01.08.2012 в 14:40. |
01.08.2012, 19:27 | #10 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сортировка списка прямыми включениями (вставками) | gary jules | Помощь студентам | 0 | 30.05.2012 20:09 |
Метод сортировки (простыми включениями) | Alexander7 | Помощь студентам | 2 | 18.05.2012 16:27 |
Путаница с While и If | Drozd-A | Помощь студентам | 2 | 14.10.2011 17:00 |
Путаница с типами для больших строк | WennY | Общие вопросы Delphi | 5 | 02.09.2011 06:27 |
Путаница в формах в Delphi | TaYgA | Помощь студентам | 2 | 26.10.2009 19:51 |