![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Как лучше реализовать такую штуку? Пробывал define так потом нельзя доступиться к переменным. Короче мне нужно огбьявить размер масива и сам масив, конечно, чтобы я потом смог получиь данный размер, в плане как переменная класа. -------------------- Never again... |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Оно? Хотя жестко размер ты не сможешь задать при создании.. Это сообщение отредактировал(а) chipset - 28.3.2005, 20:24 --------------------
|
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Нет не то. У меня свой клас. И там нужно разместить массив, например целых чисел. Как это сделать чтобы размер масива была членом класса. Тобиш примерно так Const int size; int array[size] Сорри если как-то не так выразился. -------------------- Never again... |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Так? Ну можно ещё size запихнуть в класс. Это сообщение отредактировал(а) chipset - 28.3.2005, 20:54 --------------------
|
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
const int size = 10; int array[size]; c:\program files\microsoft visual studio\myprojects\skb_rhytm\karavayevidachi\xsender\control.h(42) : error C2258: illegal pure syntax, must be '= 0' c:\program files\microsoft visual studio\myprojects\skb_rhytm\karavayevidachi\xsender\control.h(42) : error C2252: 'size' : pure specifier can only be specified for functions c:\program files\microsoft visual studio\myprojects\skb_rhytm\karavayevidachi\xsender\control.h(43) : error C2065: 'size' : undeclared identifier c:\program files\microsoft visual studio\myprojects\skb_rhytm\karavayevidachi\xsender\control.h(43) : error C2057: expected constant expression c:\program files\microsoft visual studio\myprojects\skb_rhytm\karavayevidachi\xsender\control.h(43) : warning C4200: nonstandard extension used : zero-sized array in struct/union c:\program files\microsoft visual studio\myprojects\skb_rhytm\karavayevidachi\xsender\control.h(53) : error C2229: class 'IoControl' has an illegal zero-sized array Так что-ли? -------------------- Never again... |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Ты что-то неправильно делаешь, покажи тот код который ты компилировал.
Вот:
Компилицца и не жужжит, компилер VC7.1. --------------------
|
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Ну ты что издеваешся? Если константа за пределами класа компилиться нормально, и я про ЭТО знаю. Ты, простите вы, внесите константу в класс....и полезут ероры. у меня VC++ 6.0 П.С. Я попробовал с внешней константой и все сработало. Но меня так не устраивает поскольку мне нужно знать размер масссссива с которым мне потом прийдеться рАботать. Предупреждаю лишнее прения и последующие непонятки. -------------------- Never again... |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Продолжаем извращения и делаем так: ;P
Это сообщение отредактировал(а) chipset - 28.3.2005, 21:48 --------------------
|
||||
|
|||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Те же, входит Гамлет:
: error C2258: illegal pure syntax, must be '= 0' : error C2252: 'size' : pure specifier can only be specified for functions : error C2065: 'size' : undeclared identifier : error C2057: expected constant expression : warning C4200: nonstandard extension used : zero-sized array in struct/union : error C2229: class 'IoControl' has an illegal zero-sized array Короче так тоже не фурычит! А по компилятору ты не прав жужжжит и матом кроет -------------------- Never again... |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
А причем тут IoControl? Какой у тебя компилер? --------------------
|
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
IoControl имя моего класа. И не уходите от темы..... Хотите мне мозги запудрить чтобы я про сабж забыл Суть там не в названии класса, он копилиться и РАБОТАЕТ отлично, но с масивом он бы стал лучше Он даже компилиьтся с внешней константой. Но когда я делаю, деже static const int size = 10; он уже ругаеться : error C2258: illegal pure syntax, must be '= 0' : error C2252: 'size' : pure specifier can only be specified for functions -------------------- Never again... |
||||
|
|||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Ещё раз повторю:
Компилится как на VC7.1, так и на gcc. Можете проверить.. Что у вас там написано, я знать не могу... Это сообщение отредактировал(а) chipset - 28.3.2005, 22:12 --------------------
|
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Раз Присоединённый файл ( Кол-во скачиваний: 4 )
Screen.JPG-------------------- Never again... |
||||
|
|||||
| Nuzur |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Два Присоединённый файл ( Кол-во скачиваний: 5 )
ForChipset.rar-------------------- Never again... |
||||
|
|||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Что ещё раз потверждает что VC6 mustdie. Он плохо поддерживает стандарт..
Почему не хочешь использовать вектор? Это сообщение отредактировал(а) chipset - 28.3.2005, 22:43 --------------------
|
|||
|
||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Кто может ответить ИМЕННО для VC++ 6.0 ?
chipset спасибо за попытку помочь. -------------------- Never again... |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
vector использовать религия запрещает? уж он то в VC6 должен быть.. Это сообщение отредактировал(а) chipset - 28.3.2005, 22:50 --------------------
|
||||
|
|||||
| Fire-Plug |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
100%-но надежный вариант обьявления констант в классах:
--------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Fire-Plug, извращение
Это сообщение отредактировал(а) chipset - 28.3.2005, 23:53 --------------------
|
|||
|
||||
| Fire-Plug |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
chipset Я где-то уже говорил, что STL c 1998 г. включена в стандарт С++ и является неотьемлемой частью языка. За последние 4 года у меня нет ни одной проги, где бы не использовалась STL. Но народ упорствует... vector им, видишь ли, не годится А enum в обьявлении класса - очень практичная штука, и не только для размера массива, а для кодов ошибок, списка состояний, списка операций... продолжать можно бесконечно. --------------------
Объясни другому - поймешь сам (Народная примета) |
|||
|
||||
| Goryachev |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.2.2005 Где: Израиль Репутация: нет Всего: нет |
Действительно, опять мелкософт маразмом занимались.
На VC7.0 компилируется, а на VC6 нет. Поэтому единственный выход для VC6:
А вообще-то с enum все очень круто работает. Это сообщение отредактировал(а) Goryachev - 29.3.2005, 00:29 |
||||
|
|||||
| Fire-Plug |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Пример полезного совместного использования enum и массивов - машина состояний
Goryachev, благодарю, но лучше ты бы мне репутацию поднял --------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Меня не интересует тема с енумами.
Вектором я умею пользоваться. НО меня ИНТЕРЕСОВАЛ именно ответ на этот вопрос. Если КТО-ТО знает ответ на ЭТОТ вопрос, милости прошу, все остальных прошу не загрязнять тему вашими разговорами на филосовские темы. Заранее спасибо. -------------------- Never again... |
|||
|
||||
| chipset |
|
||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
Тогда конкретизируйтесь. Изворот с енумами подходит?
Пока что я видел только разговор по теме. --------------------
|
||||||
|
|||||||
| jorkug |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 97 Регистрация: 21.3.2005 Репутация: нет Всего: 1 |
Чем тебя этот вариант не устраивает? |
||||
|
|||||
| Fire-Plug |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Да решение элементарное.
Просто вместе c массивом следует добавить в класс его размер и инициализировать той же константой.
Если ты лабу делаешь в КПИ на Караваевых дачах, то требования понятны, а если это реальный проект, то любое работающее решение должно быть приемлемо, тем более с использованием STL. --------------------
Объясни другому - поймешь сам (Народная примета) |
||||||
|
|||||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
а зачем описывать статический массив. не проще ли описать динамический и создать его в конструкторе?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| chipset |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
_hunter, я это спрашиваю всю тему уже...
Это сообщение отредактировал(а) chipset - 29.3.2005, 19:09 --------------------
|
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
не...
я так:
имею в виду -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| chipset |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4071 Регистрация: 11.1.2003 Где: Seattle, US Репутация: 27 Всего: 165 |
У Nuzur'a такая фишка вызывает еррору. --------------------
|
||||
|
|||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Всем спасибо.
Это реальный порект, а не лаба, я б так не парился. Я решил эту проблему, но к сожелению он не может быть прИмЕнен в других проектах, покрайней мере как догма. Решил эту порблему через sizeof. И вообще я так понял надо на 7-й студио переходить. Короче всем спасибо, сорри коль чем кого обидел. -------------------- Never again... |
|||
|
||||
| _hunter |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
он привел рисунок с ошибкой только на:
а на
ничего не сказал... но если так не катит, можно так:
-------------------- Tempora mutantur, et nos mutamur in illis... |
||||||
|
|||||||
| Олег М |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 436 Регистрация: 10.6.2004 Где: Москва Репутация: 7 Всего: 7 |
А имя переменной не пробовал поменять? а то size как-то мутновато, например
|
||||
|
|||||
| Nuzur |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 4.7.2004 Репутация: нет Всего: 5 |
Пробывал. Только это ничего не дало. Просто 6-й с-шник(хоть я его и люблю) видать кривой малеха. У каждого всои недостатки, тут ничего не попишеш. -------------------- Never again... |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
Nuzur, а мой вариант чем не подходит?
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Ребята, ну что вы паритесь?
C++ позволяет объявлять константы как члены класса, но инициализируются они с помощью конструктора - один единственный раз - и не могут изменяться в дальнейшем... Если какой-нибудь компилятор это и проглатывает, это, тем не менее, отступление от стандарта. Но, впрочем, можно пойти на такую хитрость:
...и это в случае, если массив должен быть фиксированной размерности... ну а если размерность меняется, не остается ничего иного, кроме как выделять память динамически, работать с указателями и не забывать подчищать за собой... %)) ... ммм... а вообще, если членом класса надо сделать массив, то я бы рекомендовал использовать возможности STL, к примеру... Это сообщение отредактировал(а) BreakPointMAN - 29.3.2005, 22:58 -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
BreakPointMAN, найди существенные отличия между своим вариантом и вариантом Fire-Plug' a....
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Goryachev |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 67 Регистрация: 23.2.2005 Где: Израиль Репутация: нет Всего: нет |
_hunter
Найди отличия между твоим вариантом, и моим на 2 странице. |
|||
|
||||
| _hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 16 Всего: 98 |
опа... согласен.
-------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
| Hroft |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Клево. А вообще, решение с enum очень прикольное, лично я о них всегда забываю
Тогда уж еще проще в аргумент конструктора размер впихнуть... и получить обрезанный vector Короче говоря, непонятно, что не нравится уважаемому автору топика... Любое решение, даже с дефайном, подходит. При чем тут sizeof, мне вообще непонятно |
||||
|
|||||
| np9mi7 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 553 Регистрация: 17.8.2003 Где: Volgograd, Russia Репутация: 5 Всего: 10 |
использую STL и vector<> в качестве свойства объекта и все проблемы решены...
и с ресурсами коректно и динамически все можно Это сообщение отредактировал(а) np9mi7 - 31.3.2005, 12:34 |
|||
|
||||
| Fire-Plug |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 102 Регистрация: 15.3.2005 Репутация: -1 Всего: 0 |
Who cares (т.е. кого греет)!!! #define - это архаизм и доводы в пользу данной характеристики давно стали обшшым местом. Лично я использую #define крайне редко в случаях, когда не хватает воображения чтобы соорудить inline-ф-цию, напр.:
--------------------
Объясни другому - поймешь сам (Народная примета) |
||||
|
|||||
| Hroft |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 310 Регистрация: 20.10.2003 Где: Москва Репутация: нет Всего: 3 |
Я, вообще-то, не против дефайна написал, а против знака "=" после оного. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |