Указатели в Qt4 (Непонятно)

Модератор: Модераторы разделов

Ответить
cm9x4
Сообщения: 33
ОС: OpenSuse 11.1

Указатели в Qt4

Сообщение cm9x4 »

Столкнулся с такой непонятной для меня проблемой.

В .h объвлены 2 сокета.

QTcpServer *m_serverSocket;
QTcpSocket *m_currentServerSocket;

При запуске программы оба уже не имеют не NULL значения. Соотвественно в нужном месте проверку на NULL проскакивают. переменные нигде не инициализируются до прохождения этой проверки. Может как-то нужно инициализировать поля?

if(!m_currentServerSocket)
{
......
}


Почему? :unsure:

Давно не программировали на C++. Так что сильно не пинайте. :)

В ВУЗе писал на BC++B 5, 5.5, 6, VC++ 6 и никаких проблем с указателями не имел.

p.s. Вообще удивило отсутствие NULL как такового. Буду рад, если кто-то сможет кинуть ссылкой по поводу корректной работы с указателями в Qt4.

Спасибо сказали:
Аватара пользователя
Portnov
Модератор
Сообщения: 1786
Статус: Матёрый линуксоид
ОС: Debian testing/unstable
Контактная информация:

Re: Указатели в Qt4

Сообщение Portnov »

Собственно, Qt4 здесь ни при чём. Стандарт C++ не даёт никаких гарантий, что объявленная, но не инициализированная переменная будет равна какому-то конкретному значению. Обычно там оказывается "мусор". Так что должно быть достаточно

Код: Выделить всё

QTcpServer *m_serverSocket = NULL;

и т.д.
Работа: Ubuntu 9.10
Дом: Debian testing/unstable и на всякий случай winxp в virtualbox.
Для разнообразия: моя домашняя страница -http://iportnov.ru
Спасибо сказали:
cm9x4
Сообщения: 33
ОС: OpenSuse 11.1

Re: Указатели в Qt4

Сообщение cm9x4 »

Portnov писал(а):
24.02.2010 17:15
Собственно, Qt4 здесь ни при чём. Стандарт C++ не даёт никаких гарантий, что объявленная, но не инициализированная переменная будет равна какому-то конкретному значению. Обычно там оказывается "мусор". Так что должно быть достаточно

Код: Выделить всё

QTcpServer *m_serverSocket = NULL;

и т.д.
Потому и задавал вопрос. На подобное объявление возникает ошибка.
main.cpp:2: In file included from main.cpp:2:
mainwindow.h:22: ошибка: ISO C++ запрещает инициализацию элемента ‘m_serverSocket’
mainwindow.h:22: ошибка: в результате которой ‘m_serverSocket’ становится статическим
mainwindow.h:22: ошибка: некорректная инициализация внутри класса статического элемента данных нецелочисленного типа ‘QTcpServer*’

В принципе проблему решил через QPointer<>, но сам факт непонятен.
Спасибо сказали:
NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Указатели в Qt4

Сообщение NickLion »

Неплохо было бы написать больше информации, тогда и ответ правильный дать легче ;)
Насколько я понял, эти переменные - это поля класса? Тогда их инициализация должна проводиться в конструкторе (через список инициализации или в теле конструктора). И опять же, к Qt никакого отношения это всё не имеет. Просто нужно понять объектно-ориентированное программирование в С++ ;)
Спасибо сказали:
cm9x4
Сообщения: 33
ОС: OpenSuse 11.1

Re: Указатели в Qt4

Сообщение cm9x4 »

NickLion писал(а):
24.02.2010 21:09
...Тогда их инициализация должна проводиться в конструкторе (через список инициализации или в теле конструктора). ..
Действительно. :blush:

Похоже пора снова попинать "труп Страуса" :)
Спасибо сказали:
Ответить