Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 670
от 17.02.2007, 09:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 468, Экспертов: 59
В номере:Вопросов: 5, Ответов: 9


Вопрос № 75205: Здравствуйте эксперты!При компиляции программы появляются ошибки: [C++ Error] Unit1.cpp(27): E2108 Improper use of typedef 'Func' [C++ Error] Unit1.cpp(28): E2108 Improper use of typedef 'Func' [C++ Error] Unit1.cpp(29): E2108 Improper...
Вопрос № 75257: Моя программа запущенная на двох компютерах. Как сделать так, чтобы при написании текста в Мемо1 текст писался в Мемо1 на другом компютере?...
Вопрос № 75286: Добрый день. Обьясните пожалуйста почему в этой программе изменяются битовые поля, и почему цикл do while выполняется именно 255 раз, и почему переменная ptr имеет тип именно char...
Вопрос № 75305: Подскаж ите какие-нибудь книги для программирования типа клиент-сервер....
Вопрос № 75314: Уважаемые Эксперты, Подскажите, плз, как используя класс CPropertySheet закладки расположить "снизу". Спасибо....

Вопрос № 75.205
Здравствуйте эксперты!При компиляции программы появляются ошибки:
[C++ Error] Unit1.cpp(27): E2108 Improper use of typedef 'Func'
[C++ Error] Unit1.cpp(28): E2108 Improper use of typedef 'Func'
[C++ Error] Unit1.cpp(29): E2108 Improper use of typedef 'Func'
подскажите где ошибка?

Приложение:

Отправлен: 11.02.2007, 13:59
Вопрос задал: Hunter20 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Базанов Иван Александрович
Здравствуйте, Hunter20!
class Func
{
}; - это объявление нового типа данных, фактически. Для того чтобы обращаться к полям и методам, нужно создать экземпляр этого класса - переменную.
Func myFunc;
Тогда обращения myFunc.Size и myFunc.Increase имеют смысл.
Кстати - у тебя перед глазами пример: класс TForm1 и переменная Form1 указатель на объект типа TForm1
---------
Программист ошибается дважды: первый раз при рождении, второй при выборе профессии
Ответ отправил: Базанов Иван Александрович (статус: 4-ый класс)
Ответ отправлен: 11.02.2007, 14:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо ,я уже и сам догадался

Отвечает: kool
Здравствуйте, Hunter20!
Вот это
Func.Size=0;
Func.Increase(3);
не правильно.
Func - это тип. А чтобы такое
написать нужно чтобы Func было
объектом этого типа (класса).
Правильно будет так (см.прил.)
Удачи!

Приложение:

---------
I am.

Ответ отправил: kool (статус: 7-ой класс)
Ответ отправлен: 12.02.2007, 12:48


Вопрос № 75.257
Моя программа запущенная на двох компютерах. Как сделать так, чтобы при написании текста в Мемо1 текст писался в Мемо1 на другом компютере?
Отправлен: 11.02.2007, 20:04
Вопрос задал: Костенко Игорь Викторович (статус: 2-ой класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Lemeshev Konstantin
Здравствуйте, Костенко Игорь Викторович!
Будем считать, что компы с программой имеют подключение друг к другу по сети, иначе поставленная задача не выполнима. Так что нужно использовать сокеты, для связи между программами.
Почитать и посмотреть примеры можно по следующим ссылкам:

http://www.realcoding.net/article/view/1950 (для C++Builder)
http://www.gamedev.ru/articles/?id=80101
Ответ отправил: Lemeshev Konstantin (статус: 4-ый класс)
Ответ отправлен: 12.02.2007, 06:18
Оценка за ответ: 5
Комментарий оценки:
Спасибо. Вполне исчерпывающий ответ.

Отвечает: kool
Здравствуйте, Костенко Игорь Викторович!
Почитай про сокеты, именованные каналы, почтовые слоты,
вызов удаленных процедур, DCOM и т.д.
Удачи!

---------
I am.
Ответ отправил: kool (статус: 7-ой класс)
Ответ отправлен: 12.02.2007, 12:48
Оценка за ответ: 4
Комментарий оценки:
Спасибо. Еще би ссылочку:-).


Вопрос № 75.286
Добрый день.
Обьясните пожалуйста почему в этой программе изменяются битовые поля, и почему цикл do while выполняется именно 255 раз, и почему переменная ptr имеет тип именно char

Приложение:

Отправлен: 11.02.2007, 23:27
Вопрос задал: Platon (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sergijj
Здравствуйте, Platon!

Отвечаю по порядку:

1. Битовые поля изменяются потому, что они оформлены всесте с ptr как union. Union - это такая структура, где все поля находятся в одной и той же области памяти. Т.е. у Вас зарезервирована область памяти, размером в 1 байт (unsigned char), к которой можно обращаться либо как к байту (unsigned char), либо как к структуре с битовыми полями (у которой размер тоже равен 1 байту (4 битовых поля по 2 бита = 8 бит = 1 байт)). Причём, как бы Вы не обращались сюда, Вы обращаетесь к одной и той же ячейке памяти. Следовательно, меняя в цикле значение op.ptr (декрементируя его), Вы одновременно меняете и значение битовых полей (так как адрес-то памяти тот же).

2. Цикл выполняется именно 255 потому что Вы так "заказали". Т.е. в начале Вы проинициализировали op.ptr значением 255, а потом, раз в цикл, Вы его декрементируете (вычитаете единицу). Оператор
op.ptr--;
как раз и обозначает следующее: "использовать значение op.ptr, а затем, декрементировать его" (если бы оператор был такой:
--op.ptr;
то это бы обозначало: "сначала декрементировать op.ptr, а затем использовать полученное значение op.ptr").
В свою очередь морфологическая конструкция
do {
} while (op.ptr--);
дословно обозначает следующее: "Делать (do) до тех пор, пока (while) в ячейке памяти op.ptr есть значение, отличное от нуля. После чтения значения из ячейки памяти op.ptr, значение op.ptr декрементировать."
Следовательно у Вас:
1. Инициализируется op.ptr значением 255;
2. В цикле проверяется значение op.ptr на "НЕ НУЛЬ";
3. Если не нуль, то декремент;
4. Если нуль, выход из цикла.

3. На Ваш третий вопрос ответить можно только расплывчато: "Потому, что Вы так захотели (посчитали нужным)". В принципе, можно было использовать почти что угодно другое. В данном случае вижу причину использования unsigned char в том, что цикл нужно выполнять именно 255 раз. Тип unsigned char = 1 байту = 8 бит и может принимать значения от 0 до 255 (т.е. всего 256 значений = 2 в 8-й степени (по количеству бит в типе)). Поэтому не имело смысла брать тип, например, 2 байта (unsigned short int = 2 байта = 16 бит, 0..65535), ибо всё равно больше 255 и меньше 0 значение переменной никогда не будет.

Успехов!

P.S.: Если что не понятно - спрашивайте.
---------
Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 8-ой класс)
Ответ отправлен: 12.02.2007, 10:08

Отвечает: kool
Здравствуйте, Platon!
Цикл выполняется 256 раз (посчитай еще когда op.ptr==0).
256 - это число возможных значений переменной типа char, которая
состоит из 8 бит (2^8=256).
Битовые поля изменяются, потомучто они входят в объединение с
переменной unsigned char ptr. Всего битовые поля занимают 8 БИТ.
Вот наверное и усе.
Удачи!

---------
I am.
Ответ отправил: kool (статус: 7-ой класс)
Ответ отправлен: 12.02.2007, 12:49

Отвечает: Thread
Здравствуйте, Platon!
Вас, по видимому сбило название типа - char. Возможно вы подумали, что char - это символ. На самом деле char - это целый тип, значения котрого лежат в диапазоне 0..255, аналог паскалевского типа byte.
Ответ отправил: Thread (статус: 4-ый класс)
Ответ отправлен: 12.02.2007, 15:18


Вопрос № 75.305
Подскаж ите какие-нибудь книги для программирования типа клиент-сервер.
Отправлен: 12.02.2007, 02:18
Вопрос задал: Костенко Игорь Викторович (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Андрей / Magistr
Здравствуйте, Костенко Игорь Викторович!

Для поиска книг используйте поиск.

О проектировании данных для клиент-серверных приложений С++Builder. (http://www.citforum.ru/programming/application/builder_ap0.shtml)

Платформа для создания серверов приложений на C++ (http://gazette.linux.ru.net/lg79/tougher.html)

Успехов в программировании!
Ответ отправил: Андрей / Magistr (статус: 5-ый класс)
Ответ отправлен: 12.02.2007, 22:21


Вопрос № 75.314
Уважаемые Эксперты,
Подскажите, плз, как используя класс CPropertySheet закладки расположить "снизу".
Спасибо.
Отправлен: 12.02.2007, 07:01
Вопрос задал: PostM (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Tek
Здравствуйте, PostM!
Да никак. Класс CPropertySheet отвечает за логику панели свойств, а не за ее отображение в виде панели закладок
У вас следующие варианты:
1. На этапе проектирования в редакторе ресурсов вscnfdbnm нужное положение закладок с помощью галочек Vertical и Bottom
2. Во время работы - получить дескриптор окна панели закладок (этот метод унаследован от CWnd). А затем функцией SetWindowLong() установить по этому дескриптору стили окна TCS_BOTTOM и TCS_VERTICAL в соответсвующей комбинации.
3. Я не знаю как но связать класс CPropertySheet с классом CTabCtrl. А вот как раз у этого класса есть функционал управления собственно отображением панели закладок.
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 9-ый класс)
Ответ отправлен: 13.02.2007, 17:59


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.44 beta от 26.01.2007
Яндекс Rambler's Top100

В избранное