Где объявлять глобальные переменные?
Извините за ламерский вопрос, но не мог бы кто-нибудь мне написать где и как объявлять глобальные переменные в билдере. В *.h или *.cpp и желательно конкретно после какой строчки.
Наиболее правильно - вообще не объявлять глобальные переменные, т.к. использование их - это плохой стиль.
Объявлять, конечно же, надо в *.h, например:
extern int i;
а определять в одном из *.cpp:
int i;
Номер строички значения не имеет. :)
Главное, чтоб к моменту объявления переменной был определен её тип, т.е. подключены соотв. заголовочные файлы, определены классы, структуры и т.п.
Наиболее правильно - вообще не объявлять глобальные переменные, т.к. использование их - это плохой стиль.
Объявлять, конечно же, надо в *.h, например:
extern int i;
а определять в одном из *.cpp:
int i;
Номер строички значения не имеет. :)
Главное, чтоб к моменту объявления переменной был определен её тип, т.е. подключены соотв. заголовочные файлы, определены классы, структуры и т.п.
попробовал объявить в *.h, но мне при компиляции выдает ошибку... storage class 'extern' is not allowed here... и как быть...
И как же можно обойтись без глобальных переменный если у меня в одной кнопочке присваитваются этим переменных, а под другой кнопочкой эти переменные с конкретными значениями из первой кнопочки используются.
попробовал объявить в *.h, но мне при компиляции выдает ошибку... storage class 'extern' is not allowed here... и как быть...
И как же можно обойтись без глобальных переменный если у меня в одной кнопочке присваитваются этим переменных, а под другой кнопочкой эти переменные с конкретными значениями из первой кнопочки используются.
Пример проекта покажи.
Пример проекта покажи.
Все пасиб я сам разобрался...
И как же можно обойтись без глобальных переменный если у меня в одной кнопочке присваитваются этим переменных, а под другой кнопочкой эти переменные с конкретными значениями из первой кнопочки используются.
Как понимаю, ты только начинаешь программировать, поэтому объяснить будет сложно. Посмотри что-нибудь по архитектуре, конкретно документ/вид.
Как понимаю, ты только начинаешь программировать, поэтому объяснить будет сложно. Посмотри что-нибудь по архитектуре, конкретно [COLOR=red]документ/вид.[/COLOR]
Green, это CBuilder, а не Visual C. :)
Green, это CBuilder, а не Visual C. :)
Ты явно что-то не понял.
Я говорю об архитектурных решениях, а не о средствах разработки.
Ты явно что-то не понял.
Я говорю об архитектурных решениях, а не о средствах разработки.
Ну, если это ты говоришь, то наверно так оно и есть, я явно что-то не понял. Но я еще не встречал в CBuilder-е такое понятие как документ/вид. Например крутое архитектурное решение: множественное наследование. Как быть с ним в CBuilder-e?
Ну, если это ты говоришь, то наверно так оно и есть, я явно что-то не понял. Но я еще не встречал в CBuilder-е такое понятие как документ/вид.
А при чем тут CBuilder?
Отвлекись от средства разработки. В коробке с карандашами тоже нет карандаша цветом "домик у озера, в котором живет Старый лис."
Например крутое архитектурное решение: множественное наследование. Как быть с ним в CBuilder-e?
Множественное наследование относится к реализации, а не к архитектуре, т.к. архитектура в общем не зависит от языка реализации.
Множественное наследование либо поддерживается, либо нет конкретным языком программирования, и никак не зависит от средства разработки (в т.ч и Builder, и VS, и т.д.).
Языком С++ множественное наследование поддерживается. Компилируем пример и убеждаемся в этом:
class B {};
class C :A,B {};
P.S. Я что-то не улавливаю связи между "документ/вид" ("МодельДанных/Контроллер/UI"), мултинаследованием и средами разработки...
А при чем тут CBuilder?
Программа пишется на Buildere.
class B {};
class C :A,B {};
class B:TShape {};
class C :A,B {};
[C++ Error] Unit1.cpp(15): E2278 Multiple base classes not supported for VCL classes
Был конкр. вопрос. Как опр.гл.переменную. Один из вариантов ответа:
1.Определить в каком-то .h файле, напр.как int global;
2.В каждом .cpp файле, где есть обращение к этой переменной написать extern int global; и подключить .h файл.
Doc/View это из Visual C. При построение проекта AppWizard спрашивает: Document/View architecture support?
Не помню такого понятия в CBuildere. Но думаю столько оно не стоит, чтоб открыть спор. Я только хотел тебе подсказать, что ты на форуме CBuilder, а не Visual C. :)
Программа пишется на Buildere.
class B:TShape {};
class C :A,B {};
[C++ Error] Unit1.cpp(15): E2278 Multiple base classes not supported for VCL classes
Ключевое слово - VCL.
Какое оно имеет отношение к С++?
Какое оно имеет отношение к OOD?
Ты опять путаешь мягкое с теплым.
Был конкр. вопрос. Как опр.гл.переменную. Один из вариантов ответа:
1.Определить в каком-то .h файле, напр.как int global;
2.В каждом .cpp файле, где есть обращение к этой переменной написать extern int global; и подключить .h файл.
В корне неправильный вариант ответа.
1. Определять надо в единице компиляции (.cpp файле).
2. А объявлять (extern) можно где угодно, хоть в .h, хоть в .cpp
3. Подключать что-то (.h) совсем не обязательно.
Doc/View это из Visual C.
Document/View - это из OOD (объектно-ориентированный дизайн).
Я только хотел тебе подсказать, что ты на форуме CBuilder, а не Visual C. :)
Ты думаешь, что пользователи CBuilder не доросли до OOA&D ?
попробовал объявить в *.h, но мне при компиляции выдает ошибку... storage class 'extern' is not allowed here... и как быть...
И как же можно обойтись без глобальных переменный если у меня в одной кнопочке присваитваются этим переменных, а под другой кнопочкой эти переменные с конкретными значениями из первой кнопочки используются.
Ну дык если кнопочки лежат на одной форме, объяви переменную как член класса формы. Если кнопочки на разных формах, объяви переменную в классе одной из форм как public и далее
Form1->MyVariable = Something;
А вообще правильно, что использование глобальных переменных-дурной тон.
Ключевое слово - VCL.
Какое оно имеет отношение к С++?
Какое оно имеет отношение к OOD?
Ты опять путаешь мягкое с теплым.
Хорошо, что ты ничего ни чем не путаешь.
Кто задал вопрос, пишет на CBuilder-е используя библ. VCL.
В корне неправильный вариант ответа.
1. Определять надо в единице компиляции (.cpp файле).
2. А объявлять (extern) можно где угодно, хоть в .h, хоть в .cpp
3. Подключать что-то (.h) совсем не обязательно.
В корне неправильный? Типа вообще нерабочий?
Document/View - это из OOD (объектно-ориентированный дизайн).
Ты думаешь, что пользователи CBuilder не доросли до OOA&D ?
Я сам, в отличие от тебя, пользователь CBuilder. И для чего задавать такие глупые вопросы?
Программа пишется на Buildere.
class B:TShape {};
class C :A,B {};
[C++ Error] Unit1.cpp(15): E2278 Multiple base classes not supported for VCL classes
Гы, батенька! Так естественно такая халява не прокатит. Ну не хочет Борланд чтобы его любимые VCL классы мультиплаями были. А с обычными - да ради бога. Наследуй от стольки предков, от скольки надо.
P.S. VCL вообще большая помойка....
Хорошо, что ты ничего ни чем не путаешь.
Кто задал вопрос, пишет на CBuilder-е используя библ. VCL.
"CBuilder - оставь надежду на мультинаследование всяк сюда входящий!" :D
Да ради бога, пусть использует VCL.
VCL - по большому счету оконная библиотека и необязательно использовать её там, где она совсем не нужна. Представляешь, если ты пишешь на CBuilder, не обязательно пихать её везде. Если четверг - рыбный день, то компот не обязательно должен быть с рыбой.
Из другой темы ясно, что автор рисует графики. Я предложил ему создать отдельный класс для получения, хранения и обработки данных для последующего построения графика. Это и есть "Документ" или "Модель данных". На кой хрен в ней VCL если этот класс не имеет никакого отношения к GUI?
А раз VCL (точнее производность от VCL) там не нужен, то кто мешает, если это понадобиться, использовать мультинаследование?
В корне неправильный? Типа вообще нерабочий?
Типа да.
Ты явно что-то не понял.
Я говорю об архитектурных решениях, а не о средствах разработки.
А чего-бы человека сразу не отправить на курсы ООА, ООПроектирования и ООПрограммирования? Или в институт? Объявлять глобальные переменные - это Вам не в бочку чихнуть!
А чего-бы человека сразу не отправить на курсы ООА, ООПроектирования и ООПрограммирования? Или в институт? Объявлять глобальные переменные - это Вам не в бочку чихнуть!
Это наезд?
Тогда не поленись прочитать все посты от начала.
Как и где объявлять глобальные переменные, автор получил ответ во втором посте.
Далее был вопрос:
И как же можно обойтись без глобальных переменный если у меня в одной кнопочке присваитваются этим переменных, а под другой кнопочкой эти переменные с конкретными значениями из первой кнопочки используются.
И получил ответ.
Я так полагаю не надо было пугать человека понятиями OOA&D, а рассказать про аиста или как код в капусте находят? :D
Вас этот флейм ещё не задолбал?
Я не понимаю, чего вы пытаетесь доказать?
То, что CBuilder на столько уникальный продукт, что общепринятые методы создания ПО в нем не действуют? Ну чтож, удачи!
Это наезд?
Тогда не поленись прочитать все посты от начала.
Как и где объявлять глобальные переменные, автор получил ответ во втором посте.
Далее был вопрос:
И получил ответ.
Я так полагаю не надо было пугать человека понятиями OOA&D, а рассказать про аиста или как код в капусте находят? :D
Вас этот флейм ещё не задолбал?
Я не понимаю, чего вы пытаетесь доказать?
То, что CBuilder на столько уникальный продукт, что общепринятые методы создания ПО в нем не действуют? Ну чтож, удачи!
Предлагаю перенести эту тему в Гостевую книгу и назвать "Самые бесполезные ответы на простой вопрос".:angel:
Предлагаю перенести эту тему в Гостевую книгу и назвать "Самые бесполезные ответы на простой вопрос".:angel:
Уважаемый, если твой профессиональный уровень недостаточен для оценки подобных советов, это ещё не значит, что они бесполезны.
Ребенок не понимает опасности электричества, о которой говорят взрослые, пока не сунет два пальца в розетку.
Да и вопрос не так прост, как кажется на первый взгляд. "Почему птицы летают? - Потому, что крыльями машут."
Вопрос растет из ошибочного подхода к архитектуре ПО, которая свойствена всем новичкам.
Впрочем, переносите тему куда хотите. Мои ответы для тех, кто умеет вникать в суть, учиться, перенимать опыт и повышать свой уровень.
Уважаемый, если твой профессиональный уровень недостаточен для оценки подобных советов, это ещё не значит, что они бесполезны.
Ребенок не понимает опасности электричества, о которой говорят взрослые, пока не сунет два пальца в розетку.
Да и вопрос не так прост, как кажется на первый взгляд. "Почему птицы летают? - Потому, что крыльями машут."
Вопрос растет из ошибочного подхода к архитектуре ПО, которая свойствена всем новичкам.
Впрочем, переносите тему куда хотите. Мои ответы для тех, кто умеет вникать в суть, учиться, перенимать опыт и повышать свой уровень.
Мой профессиональный уровень оценивается более чем 20 - летним стажем системного программирования, Наличем 20 - сертификатов в.т.ч. от фирмы Microsoft. Собственными разработками ОС и ЛВС. И еще много чем. А вопрос действительно простой. Все остальное полный флуд. И архитектура ПО и ООП здесь ни причем. Просто товарищ еще только учится и разводить такие дискуссии - только сбивать его с толку. Я думаю он уже вообще забил на все это обсуждение и давно разобрался сам.
ЗЫ: Впрочем это все тоже флуд.
Мой профессиональный уровень оценивается более чем 20 - летним стажем системного программирования, Наличем 20 - сертификатов в.т.ч. от фирмы Microsoft. Собственными разработками ОС и ЛВС. И еще много чем.
О! (хотя весьма сомнительно судя по другим постам)
Будем письками меряться?
Я - 13 летний ХаЦкЕр из Усть-Урюпинска, 15 см.
Огромное спасибо за твои бесполезные советы что и как мне говорить.
На сем раскланиваюсь.
Уважаемый, если твой профессиональный уровень недостаточен для оценки подобных советов, это ещё не значит, что они бесполезны.
...
Мои ответы для тех, кто умеет вникать в суть, учиться, перенимать опыт и повышать свой уровень.
Не психуй. :)
Лучше почитай книгу Уэллин-"Как не надо программировать на C++".
Не коды конечно. Там много смешных прог.историй
P.S. Хоть абсолютно не имеет никакого значения, но способ объяв.гл.переменной в Buildere работает.(теперь проверил).