LINUX.ORG.RU

C++:expected unqualified-id


0

0

Сегодня услышал, что в терминах С++ структура похожа на класс, и может иметь конструкторы\деструкторы. Попробовал:
struct some_struct_in_memory{

};

some_struct_in_memory(void* where);

Получаю от gcc:
error: expected unqualified-id before "void"
error: expected `)' before "void"

Что это такое и как с этим бороться?

anonymous

Либо помести обьявление внутрь обьявления структуры, либо обьяви

some_struct_in_memory::some_struct_in_memory(void* where);

imp ★★
()

С классом у тебя то же самое было бы.

some_struct_in_memory(void* where);

так нужно писать только внутри объявления структуры.

А вне ее нужно писать

some_struct_in_memory::some_struct_in_memory(void* where)

dilmah ★★★★★
()
Ответ на: комментарий от dilmah

Структура не просто похожа на класс. Это и есть класс с единтсвенным отличием: доступ по умолчанию public.

placement_new ★★
()

>Сегодня услышал, что в терминах С++ структура похожа на класс, и может иметь конструкторы\деструкторы.

Тогда это будет не структура а класс с дефолтным public доступом и дефолтным public наследованием. Если есть желание сохранить хоть немного единообразия в С++ проекте используй везде class, а struct делай в стиле Си для интероперабельности с Си кодом.

Absurd ★★★
()
Ответ на: комментарий от placement_new

>Почему неверные? То что структура С++ задумывалось для совместимости

Для совместимости с чем? Если она не POD, то она не совместимая

>не маешает ей быть классом

А какой смысл дублировать сущность? Неужели ради того чтобы один раз public не написать?

Absurd ★★★
()
Ответ на: комментарий от placement_new

Дело в том, что эта структура пишется в заmmapенную память, которая позже скидывается на диск. Эта структура - суперблок, так что мне бы не хотелось засорять плюсовыми прибамбасами образ диска :)

anonymous
()
Ответ на: комментарий от placement_new

>На сколько я понимаю введено для совместимости c сишными структурами.

Структура с конструктором/деструктором по С++ стандарту Plain Old Data (POD) не является и с сишными структурами может быть совместима только случайно.

Absurd ★★★
()
Ответ на: комментарий от anonymous

>Дело в том, что эта структура пишется в заmmapенную память, которая позже скидывается на диск. Эта структура - суперблок, так что мне бы не хотелось засорять плюсовыми прибамбасами образ диска :)

Делай методы init()/destroy(). У POD могут быть невиртуальные методы.

Absurd ★★★
()
Ответ на: комментарий от anonymous

значит без пользовательского ктора надо. Иначе она уже не под.

placement_new ★★
()
Ответ на: комментарий от Absurd

> Структура с конструктором/деструктором по С++ стандарту Plain Old Data (POD) не является и с сишными структурами может быть совместима только случайно.

уточнение: если конструктор без деструктора, то POD:

A POD-struct is an aggregate class that has no non-static data members of type pointer to member, non-POD-struct, non-POD-union (or array of such types) or reference, and has no user-defined copy assignment operator and no user-defined destructor.

dilmah ★★★★★
()
Ответ на: комментарий от anonymous

> Дело в том, что эта структура пишется в заmmapенную память, которая позже
> скидывается на диск. Эта структура - суперблок,

А вот за это пороть нужно. Что будет, если такую чудо-ФС перенесут с 32-битной
машины на 64-битную? С little endian машины на big endian?

Dselect ★★★
()
Ответ на: комментарий от Dselect

Простите меня заранее. Пишется оно под 64 бита. Под встраиваемую операционку, которая _никогда_ не будет перенесена.

anonymous
()
Ответ на: комментарий от anonymous

>которая _никогда_ не будет перенесена.

так все говорят, а потом приходит тот кто платит деньги, и говорю а я хочу вот это..

fghj ★★★★★
()
Ответ на: комментарий от fghj

Она делается как очень специализированная оська для очень специфических целей. Простите за возможный понт (просто мне очень повезло), но платит большая-пребольшая фирма, которая заранее знает, чего хочет.

anonymous
()
Ответ на: комментарий от anonymous

> Пишется оно под 64 бита. Под встраиваемую операционку, которая _никогда_
> не будет перенесена.

Перенос ОС != перенос файловой системы. Вы точно уверены, что никто не захочет
подмонтировать и/или создать образ ФС на PC'юке (или ещё какой-нибудь
архитектуре)?

Dselect ★★★
()
Ответ на: комментарий от anonymous

Хоть и не мне было адресовано, но я всё же отвечу...

> Простите за возможный понт (просто мне очень повезло), но платит
> большая-пребольшая фирма, которая заранее знает, чего хочет.

Ничего страшного. Зато мы получили ещё одну возможность полюбоваться
на качество проприетарного кода.

Dselect ★★★
()
Ответ на: комментарий от Dselect

Работает принцип: "Мы можем сделать быстро, качественно, дёшево. Выберете два из этих трёх." Чаще всего выбирают быстро и потом так никак и не могут определиться качественно или дёшево.

yz
()
Ответ на: комментарий от Dselect

Я все понимаю. Я _не_ программист на плюсах, и вопрос был детским. К тому же, я еще не спец, но весь код проверяется и "руководится". И мне почему-то кажется, что Вы тоже родились без талмудов Кнута в руках. Все учатся, я тоже, и вы тоже наверняка задавали глупые вопросы, не на форумах, так старшим по мозгам. Вполне естественно, что крупные фирмы берут к себе студентов интернами, а через несколько лет - на полноценную инженерную работу.
Честное слово, я ни на кого не наезжаю - я вам всем очень благодарен за ответы и ваш опыт. Особенно товарищу dilmah, который уже много раз меня спасал в сложных ситуациях.

anonymous
()
Ответ на: комментарий от anonymous

> Она делается как очень специализированная оська для очень специфических целей.

А что за железяка-то, которой она рулить будет? Интересуюсь для того, чтоб не купить её ненароком.

Dselect ★★★
()
Ответ на: комментарий от anonymous

[offtopic] Про жизнь.

> И мне почему-то кажется, что Вы тоже родились без талмудов Кнута в руках.

Я не лез программировать ФС, да ещё и для встраиваемой ОСи. Да ещё и для production.

> Все учатся, я тоже, и вы тоже наверняка задавали глупые вопросы, не на форумах, так старшим по мозгам.

И не удивлялся, если получал в ответ втык (в том числе -- и в буквальном смысле слова).

> Вполне естественно, что крупные фирмы берут к себе студентов интернами, а через несколько лет - на полноценную инженерную работу.

Ни разу это не естественно. Одновременно работать и учиться НЕ ВЫЙДЕТ. В результате и имеем таких "спецов". Как подумаю, что такие же рулят ядерными электростанциями, или лечат людей, жить страшно становится.

> Честное слово, я ни на кого не наезжаю

Я тоже. Только после общения с очередной кривой железкой очень хочется найти того, кто писал прошивку, или разводил печатную плату, etc, и как следует поблагодарить.

И вот я захожу на LOR, и вижу процесс появления такого изделия в реальном масштабе времени, так сказать...

Dselect ★★★
()
Ответ на: [offtopic] Про жизнь. от Dselect

>Я не лез программировать ФС, да ещё и для встраиваемой ОСи.
Ну да, все начинали со змейки. Главное - ей не закончить. А для этого надо заниматься чем-то посложнее.

>Да ещё и для production.
Это еще не продакшн. Это прототип. Пруф оф концепт (с). А если оно выйдет в продакшн, но довольно нескоро.

>Одновременно работать и учиться НЕ ВЫЙДЕТ.
Сами же понимаете, что практический опыт в таких узких областях ценнее теории. Хотя здесь есть и теоретическое обучение.

>и как следует поблагодарить
Если через 4 года оно выйдет и вам не понравится - с меня ящик пива. Честно.

anonymous
()
Ответ на: комментарий от anonymous

> Ну да, все начинали со змейки.

Не, я начинал с падающего шарика (требовалось рассчитать траекторию падения с учётом сопротивления воздуха).

> Главное - ей не закончить.

Да некоторым (это не про Вас) лучше было бы на ней и закончить.

> Если через 4 года оно выйдет и вам не понравится - с меня ящик пива. Честно.

Слабое утешение, тем более, что я не употребяю.

Dselect ★★★
()
Ответ на: комментарий от Dselect

Все будет хорошо. Если весьма своеобразное высшее руководство не забросит офигенную идею. А такое уже не раз бывало :(

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.