Название: Incomplete type Отправлено: AzazelloAV от Октябрь 02, 2016, 16:07 Заблудился в 3-х соснах.
Подстажите как выбраться из ситуации: class Test { Test mTest; << Incomplete type } Название: Re: Incomplete type Отправлено: Old от Октябрь 02, 2016, 16:10 Подстажите как выбраться из ситуации: Никак. Вы не можете хранить объект не до конца описанного класса.Вместо хранения самого объекта по значению, можно хранить ссылку/указатель на него. Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 02, 2016, 16:26 Подстажите как выбраться из ситуации: Никак. Вы не можете хранить объект не до конца описанного класса.Вместо хранения самого объекта по значению, можно хранить ссылку/указатель на него. Спасибо. Прийдется городить, думал есть какое-то шаблонное решение. Хотя, теоретически, он бы мог (компилятор) два раза по классу пробежаться. Название: Re: Incomplete type Отправлено: ssoft от Октябрь 03, 2016, 10:03 Это же бред :o. Так бы получилась бесконечная вложенность. Не может тип агрегировать сам себя, может только ассоциировать через указатель или ссылку.
Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 10:13 Хотя, теоретически, он бы мог (компилятор) два раза по классу пробежаться. Допустим. Какого размера будет тогда экземпляр такого класса?Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 17:33 Хотя, теоретически, он бы мог (компилятор) два раза по классу пробежаться. Допустим. Какого размера будет тогда экземпляр такого класса?Точно такого же. А что вас удивляет? Почему на одну единицу трансляции он два раза не может пробежаться по заголовку? Первый раз пропустил неопределенные типы, второй раз дополнил их (не говорите про рекурсию и что он будет "пухнуть" до бесконечности). Я конечно не могу сказать, что так заработает, могу предположить. А откуда предположения? В своё время при программировании на ассемблере как раз два прохода и делали, если какие либо данные не могли взяться с первого. Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 17:38 не говорите про рекурсию Только это и остаётся говорить :)Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 17:41 Как уже написал выше Old, храните ссылку/указатель на класс этого типа. Тут компилятор чётко выделит количество памяти равное размеру регистра под хранение этого объекта.
Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 17:42 не говорите про рекурсию Только это и остаётся говорить :)Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 17:44 Как уже написал выше Old, храните ссылку/указатель на класс этого типа. Тут компилятор чётко выделит количество памяти равное размеру регистра под хранение этого объекта. А как же смарт поинтеры? Опять враперы. Врапер врапером погоняет... Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 17:48 Можете и смартпоинтеры использовать, тот же указатель получите. Только не забудьте деструктор сделать внешним в таком случае а также предварительное объявление класса.
Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 17:50 Можете и смартпоинтеры использовать, тот же указатель получите. Только не забудьте деструктор сделать внешним в таком случае а также предварительное объявление класса. Привидите пример вышеупомянутого класса с *mTest полем, который является смартпоинтером Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 17:57 Код
Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 18:00 Я сделал акцент на этом, потому как "размер" объекта можно высчитать, хотя со стороны это выглядит как рекурсия. Не совсем понятно. Размер вы не высчитаете из-за этой самой вложенности.Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 18:02 std::unique_ptr<Test> mTest; Чет я не понял. Как вы можете объявлять переменную цитата: "не до конца описанного класса". Или другими словами, чем отличается std::unique_ptr<Test> mTest от просто Test mTest Я сделал акцент на этом, потому как "размер" объекта можно высчитать, хотя со стороны это выглядит как рекурсия. Не совсем понятно. Размер вы не высчитаете из-за этой самой вложенности."Размер" объекта без вложености Х (Давайте считать слово "размер", как хеш противоречий.). Неужели если он зная свой "размер" без неопределенностей, не может его приплюсовать туда же? Название: Re: Incomplete type Отправлено: Old от Октябрь 03, 2016, 18:27 чем отличается std::unique_ptr<Test> mTest от просто Test mTest Тем, что размер указателя всегда известен."Размер" объекта без вложености Х (Давайте считать слово "размер", как хеш противоречий.). Неужели если он зная свой "размер" без неопределенностей, не может его приплюсовать туда же? Давайте попробуем:Код
total = 1 + X раскрываем X total = 1 + (1 + X); раскрываем X total = 1 + (1 + ( 1 + X) ); раскрываем X... Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 18:45 Цитировать чем отличается std::unique_ptr<Test> mTest от просто Test mTest Тем, что размер указателя всегда известен. Т.Е. в std::unique_ptr<Test> mTest слово Test является указателем? Да не был никогда мой mTest объектом, он был указателем, пока я не захотел сделать его "умным". В Вашем примере будет такой же incomplete type Давайте попробуем: Код
Цитировать total = 1 + X раскрываем X total = 1 + (1 + X); раскрываем X total = 1 + (1 + ( 1 + X) ); раскрываем X... Это софизм. С таким же успехом вы можете показать любому математику, не знакомого с программированием, выражение x=x+1. И ОН! ВАМ! скажет, что это бред. А чем не рекурсия? В Вашем примере: total = 1 +x; Вычислили x первым проходом (без самого х). total = 1 + x +x (как то так, а то у меня у самого может начатся рекурсия головного мозга) Название: Re: Incomplete type Отправлено: Bepec от Октябрь 03, 2016, 18:57 Вам уже ответили - это приведет к сотням проблем.
То, что вы зовете софизмом, мы называет бесконечным циклом. Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 19:06 вы можете показать любому математику, не знакомого с программированием, выражение x=x+1. И ОН! ВАМ! скажет, что это бред Он скажет корней нет ;)Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 19:06 Вам уже ответили - это приведет к сотням проблем. То, что вы зовете софизмом, мы называет бесконечным циклом. Всё, ну его в баню. Закрываю тему, а то ерудна какая то. Что хотел: Первоначальный класс class Test { Test *mTest } Стало необходимо: class Test { QSharedPointer<Test> mTest; } Разницы в определении для компилятора нет, что вы ему просто подсовываете в виде объекта, что в обертке умного указателя. Почему то большинство отвечаютщих это очевидную вещь пропускало мимо. Всем спасибо. Спасибо сказал. Всем. Название: Re: Incomplete type Отправлено: __Heaven__ от Октябрь 03, 2016, 19:12 и в моём примере сайзоф умного указателя будет равен 4 для x86 платформы.
замените unique на свой уу Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 19:12 и в моём примере сайзоф умного указателя будет равен 4 для x86 платформы. замените unique на свой уу Ваш пример тупо не компилируется. Название: Re: Incomplete type Отправлено: Hellraiser от Октябрь 03, 2016, 19:16 Цитировать Всё, ну его в баню. Закрываю тему, а то ерудна какая то. Так и надо было сразу писать, тогда все тривиально:Что хотел: Первоначальный класс class Test { Test *mTest } Код
Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 19:21 Цитировать Всё, ну его в баню. Закрываю тему, а то ерудна какая то. Так и надо было сразу писать, тогда все тривиально:Что хотел: Первоначальный класс class Test { Test *mTest } Код
Процитирую классика (Масяню): То ли все идиоты, то ли .... На этом мысль останавливается. Сделайте мне *mTest "умным" указателем. Название: Re: Incomplete type Отправлено: Old от Октябрь 03, 2016, 19:31 Сделайте мне *mTest "умным" указателем. Пожалуйста:Код
или так Код: #include <iostream> Эти проекты компилируются. Название: Re: Incomplete type Отправлено: Old от Октябрь 03, 2016, 19:33 Процитирую классика (Масяню): То ли все идиоты, то ли .... На этом мысль останавливается. Процитирую Шнурова: :)"Ведь если в башне по.бень. То что .бень,что не .бень." Название: Re: Incomplete type Отправлено: AzazelloAV от Октябрь 03, 2016, 19:46 Сделайте мне *mTest "умным" указателем. Пожалуйста:Код
или так Код: #include <iostream> Эти проекты компилируются. Гм. Гм. Ну чтож. Признаю свою ошибку. Действительно компилируются, хотя в моем случае это было не так, и я отнёс это на .... Какая разница на что... На голом примере есть факт, значит все остальное не важно. Извеняюсь, если морочил голову. Название: Re: Incomplete type Отправлено: _Bers от Октябрь 08, 2016, 18:37 не говорите про рекурсию Только это и остаётся говорить :)и каким по вашему будет размер? вы понимаете насколько это заявление противоречит здравому смыслу? |