Russian Qt Forum
Апрель 30, 2024, 11:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Incomplete type  (Прочитано 11709 раз)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #15 : Октябрь 03, 2016, 18:27 »

чем отличается      std::unique_ptr<Test> mTest от просто Test mTest
Тем, что размер указателя всегда известен.

"Размер" объекта без вложености Х (Давайте считать слово "размер", как хеш противоречий.). Неужели если он зная свой "размер" без неопределенностей,  не может его приплюсовать туда же?
Давайте попробуем:
Код
C++ (Qt)
struct Test
{
   char m_data;    // sizeof(char) == 1
   Test m_test;    // sizeof(Test) == X
};
 

total = 1 + X
раскрываем X
total = 1 + (1 + X);
раскрываем X
total = 1 + (1 + ( 1 + X) );
раскрываем X...
Записан
AzazelloAV
Гость
« Ответ #16 : Октябрь 03, 2016, 18:45 »

Цитировать
чем отличается      std::unique_ptr<Test> mTest от просто Test mTest

Тем, что размер указателя всегда известен.

Т.Е. в std::unique_ptr<Test> mTest слово Test является указателем? Да не был никогда мой mTest объектом, он был указателем, пока я не захотел сделать его "умным". В Вашем примере будет такой же incomplete type

Давайте попробуем:
Код
C++ (Qt)
struct Test
{
   char m_data;    // sizeof(char) == 1
   Test m_test;    // sizeof(Test) == X
};
 


Цитировать
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 (как то так, а то у меня у самого может начатся рекурсия головного мозга)

« Последнее редактирование: Октябрь 03, 2016, 19:02 от AzazelloAV » Записан
Bepec
Гость
« Ответ #17 : Октябрь 03, 2016, 18:57 »

Вам уже ответили - это приведет к сотням проблем.

То, что вы зовете софизмом, мы называет бесконечным циклом.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #18 : Октябрь 03, 2016, 19:06 »

вы можете показать любому математику, не знакомого с программированием, выражение x=x+1. И ОН! ВАМ! скажет, что это бред
Он скажет корней нет Подмигивающий
Записан
AzazelloAV
Гость
« Ответ #19 : Октябрь 03, 2016, 19:06 »

Вам уже ответили - это приведет к сотням проблем.

То, что вы зовете софизмом, мы называет бесконечным циклом.

Всё, ну его в баню. Закрываю тему, а то ерудна какая то.
Что хотел:

Первоначальный класс

class Test {
     Test *mTest
}

Стало необходимо:

class Test {
       QSharedPointer<Test> mTest;
}

Разницы в определении для компилятора нет, что вы ему просто подсовываете в виде объекта, что в обертке умного указателя. Почему то большинство отвечаютщих это очевидную вещь пропускало мимо.

Всем спасибо.

Спасибо сказал.

Всем.
« Последнее редактирование: Октябрь 03, 2016, 19:11 от AzazelloAV » Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #20 : Октябрь 03, 2016, 19:12 »

и в моём примере сайзоф умного указателя будет равен 4 для x86 платформы.
замените unique на свой уу
Записан
AzazelloAV
Гость
« Ответ #21 : Октябрь 03, 2016, 19:12 »

и в моём примере сайзоф умного указателя будет равен 4 для x86 платформы.
замените unique на свой уу

Ваш пример тупо не компилируется.
Записан
Hellraiser
Бывалый
*****
Offline Offline

Сообщений: 451


Просмотр профиля
« Ответ #22 : Октябрь 03, 2016, 19:16 »

Цитировать
Всё, ну его в баню. Закрываю тему, а то ерудна какая то.
Что хотел:

Первоначальный класс

class Test {
     Test *mTest
}
Так и надо было сразу писать, тогда все тривиально:
Код
C++ (Qt)
class Test;
class Test {
    Test *mTest;
}
Записан
AzazelloAV
Гость
« Ответ #23 : Октябрь 03, 2016, 19:21 »

Цитировать
Всё, ну его в баню. Закрываю тему, а то ерудна какая то.
Что хотел:

Первоначальный класс

class Test {
     Test *mTest
}
Так и надо было сразу писать, тогда все тривиально:
Код
C++ (Qt)
class Test;
class Test {
    Test *mTest;
}


Процитирую классика (Масяню): То ли все идиоты, то ли .... На этом мысль  останавливается.

Сделайте мне *mTest "умным" указателем.

Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #24 : Октябрь 03, 2016, 19:31 »

Сделайте мне *mTest "умным" указателем.
Пожалуйста:
Код
C++ (Qt)
#include <iostream>
#include <memory>
 
using namespace std;
 
struct Test
{
   unique_ptr<Test>    m_test;
};
 
int main(int argc, char *argv[])
{
   cout << "Hello World!" << endl;
   return 0;
}
 

или так

Код:
#include <iostream>
#include <QScopedPointer>

using namespace std;

struct Test
{
    QScopedPointer<Test>    m_test;
};

int main(int argc, char *argv[])
{
    cout << "Hello World!" << endl;
    return 0;
}

Эти проекты компилируются.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #25 : Октябрь 03, 2016, 19:33 »

Процитирую классика (Масяню): То ли все идиоты, то ли .... На этом мысль  останавливается.
Процитирую Шнурова: Улыбающийся
"Ведь если в башне по.бень.
То что .бень,что не .бень."
Записан
AzazelloAV
Гость
« Ответ #26 : Октябрь 03, 2016, 19:46 »

Сделайте мне *mTest "умным" указателем.
Пожалуйста:
Код
C++ (Qt)
#include <iostream>
#include <memory>
 
using namespace std;
 
struct Test
{
   unique_ptr<Test>    m_test;
};
 
int main(int argc, char *argv[])
{
   cout << "Hello World!" << endl;
   return 0;
}
 

или так

Код:
#include <iostream>
#include <QScopedPointer>

using namespace std;

struct Test
{
    QScopedPointer<Test>    m_test;
};

int main(int argc, char *argv[])
{
    cout << "Hello World!" << endl;
    return 0;
}

Эти проекты компилируются.

Гм. Гм. Ну чтож. Признаю свою ошибку.
Действительно компилируются, хотя в моем случае это было не так, и я отнёс это на .... Какая разница на что... На голом примере есть факт, значит все остальное не важно. Извеняюсь, если морочил голову.
Записан
_Bers
Бывалый
*****
Offline Offline

Сообщений: 486


Просмотр профиля
« Ответ #27 : Октябрь 08, 2016, 18:37 »

не говорите про рекурсию
Только это и остаётся говорить Улыбающийся
Я сделал акцент на этом, потому как "размер" объекта можно высчитать, хотя со стороны это выглядит как рекурсия.

и каким по вашему будет размер?

вы понимаете насколько это заявление противоречит здравому смыслу?
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.148 секунд. Запросов: 22.