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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Списки инициализации, варнинг  (Прочитано 4962 раз)
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« : Март 01, 2013, 22:11 »

Код:
struct Point3d{
float x, y, z;
};

...

Point3d *vertex = new Point3d[n];
vertex[0] = {0, 0, 0}; //варнинг в этой строчке

...
Qt 4.8.2, kunutu 12.04 x64, возникает варнинг:
extended initializer lists only available with -std=c++0x or -std=gnu++0x [enabled by default]
Вопрос: как от него избавиться?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Март 01, 2013, 22:15 »

Вопрос: как от него избавиться?
Добавить к опциям компилятора -std=c++0x или не использовать списки инициализации, которые стали доступны в последнем стандарте.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Март 02, 2013, 11:36 »

Проще и лучше добавить метод
Код
C++ (Qt)
struct Point3d {
void xyz( float _x = 0, float _y = 0,  float _z = 0 )  { x = _x; y = _y; z = _z; }
 
float x, y, z;
};
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Март 02, 2013, 12:55 »

Проще и лучше добавить метод
Код
C++ (Qt)
struct Point3d {
void xyz( float _x = 0, float _y = 0,  float _z = 0 )  { x = _x; y = _y; z = _z; }
 
float x, y, z;
};

Наверное, проще всё-таки будет так:
Код
C++ (Qt)
struct Point3d {
Point3d() : x( 0 ), y( 0 ), z( 0 )  {}
float x, y, z;
};
Записан

Qt 5.11/4.8.7 (X11/Win)
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #4 : Март 02, 2013, 13:13 »

Наверное, проще всё-таки будет так:
Хотим же просто (в смысле легко) устанавливать значения всех полей объекта в нужные значения (не обязательно нулевые).
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Март 02, 2013, 14:21 »

Наверное, проще всё-таки будет так:
Код
C++ (Qt)
struct Point3d {
Point3d() : x( 0 ), y( 0 ), z( 0 )  {}
float x, y, z;
};
Для данного конкретного класса это спорно. Напр возможна такая ситуевина
Код
C++ (Qt)
Point3d temp[1024];  // может тормозить именно за счет активного конструктора
 
Что хорошо в UI - не всегда хорошо для расчетов  Улыбающийся
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #6 : Март 03, 2013, 15:01 »

Код
C++ (Qt)
Point3d temp[1024];
 
Конструктор все равно не в этой строчке вызываться будет.

Всем спасибо за ответы. А ситуация была такая: я не хотел писать конструкторы вида Point3d() : x( 0 ), y( 0 ), z( 0 ) для каждой структуры, мне понравилась возможность списков инициализации, просто смущал варнинг. Воспользовался советом добавить к опциям компилятора -std=c++0x.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Март 03, 2013, 16:08 »

Код
C++ (Qt)
Point3d temp[1024];
 
Конструктор все равно не в этой строчке вызываться будет.
Если перекрыт конструктор без параметров - в этой строчке он вызовется 1024 раза

А ситуация была такая: я не хотел писать конструкторы вида Point3d() : x( 0 ), y( 0 ), z( 0 ) для каждой структуры, мне понравилась возможность списков инициализации, просто смущал варнинг. Воспользовался советом добавить к опциям компилятора -std=c++0x.
Такие маленькие классы на первый взгляд кажутся совсем простыми. Однако с ростом проекта все становится не так очевидно. Напр неоднократно видел жаркие споры по поводу "а верно ли называть это "point"?  Улыбающийся
Записан
Torvald
Самовар
**
Offline Offline

Сообщений: 119


Просмотр профиля
« Ответ #8 : Март 06, 2013, 10:45 »

Код
C++ (Qt)
Point3d temp[1024];
 
Конструктор все равно не в этой строчке вызываться будет.
Если перекрыт конструктор без параметров - в этой строчке он вызовется 1024 раза

А ситуация была такая: я не хотел писать конструкторы вида Point3d() : x( 0 ), y( 0 ), z( 0 ) для каждой структуры, мне понравилась возможность списков инициализации, просто смущал варнинг. Воспользовался советом добавить к опциям компилятора -std=c++0x.
Такие маленькие классы на первый взгляд кажутся совсем простыми. Однако с ростом проекта все становится не так очевидно. Напр неоднократно видел жаркие споры по поводу "а верно ли называть это "point"?  Улыбающийся

Я обычно оставляю конструктор без параметров.
А на счет Point вы правы, часто нужно бывает воспользоваться тройкой x, y, z не как точкой в пространстве. Но это мой проект, в нем разработчик только я, и мне так удобнее Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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