crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> вопрос к прошаренным в Qt GCC
OLAND
  опции профиля:
сообщение 16.12.2010, 12:52
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 25.3.2010
Пользователь №: 1564

Спасибо сказали: 0 раз(а)




Репутация:   0  


есть ли какие то требования к построению классов в GCC и Qt lib

дело в том что не раз заметил уже что очень важно порядок определения переменных
например
class myClass{
public:
     myClass(int any_integer):any_variable(any_integer){}
     QString str;
      int  any_variable;
}


например в этом случае может случится что при передачи ссылки на этот класс она потеряется.

например

в программе
setValue(myClass(100));

setValue(const myClass &anyclass)
{
      anyclass.any_variable  <<<<здесь будет 0.
}


а если поменять местами QString и Int то все работает

один раз заметил что при вставке int определения в определеное место происходила ошибка Windows

например в классе было

class xxx{

QLabel label;
int  a;

}


достаточно было поменять местами.

это нормально для Qt? или это GCC?
Причина редактирования: пользуйся тегами!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 16.12.2010, 14:03
Сообщение #2


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Что значит ссылка потеряется? Покажи больше кода. То о чем ты спрашиваешь - нет, это не нормально. Такого не должно быть.

Сообщение отредактировал Rocky - 16.12.2010, 14:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OLAND
  опции профиля:
сообщение 16.12.2010, 16:28
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 25.3.2010
Пользователь №: 1564

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нашел откуда ноги растут у этой проблемы коегде обявлено #pragma pack(2). поставил в конце #pragma pack(nopack)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.12.2010, 16:39
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Если меняешь выравнивание, то лучше использовать следующую конструкцию:
#pragma pack(push, 2)
...
#pragma pack(pop)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OLAND
  опции профиля:
сообщение 16.12.2010, 17:09
Сообщение #5


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 25.3.2010
Пользователь №: 1564

Спасибо сказали: 0 раз(а)




Репутация:   0  


ага спасибо
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 16.12.2010, 18:16
Сообщение #6


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


А что у тебя в этом случае в переменной str?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
OLAND
  опции профиля:
сообщение 16.12.2010, 19:12
Сообщение #7


Новичок


Группа: Новичок
Сообщений: 6
Регистрация: 25.3.2010
Пользователь №: 1564

Спасибо сказали: 0 раз(а)




Репутация:   0  


не уверен но помоему суть содержит . по крайней мере строка какаято была не обращал внимания. это с любым классом начинается . если перед переменной. Однажды говорю было что стоял int где то там поменял все прошло. а сегодня опять подобное начал рыть и увидел #pragma pack.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.12.2024, 11:54