то дизайн твоей программы совершенно непродуман. не лезь в классы, без них таких проблем не будет.если я из класса A вызываю метод класса B который вызывает метод класса A то если этот метод обращается к переменным класса то
Вопросы и ответы по программированию.
- NiGHt-LEshiY
- Полковник
- Сообщения: 10258
- Зарегистрирован: 13.06.2008
- Откуда: Россия
- Благодарил (а): 752 раза
- Поблагодарили: 2667 раз
- Контактная информация:
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.
Просьба присылать сообщения об ошибках в ЛС.
- andreil
- Разработчик
- Сообщения: 781
- Зарегистрирован: 14.08.2006
- Откуда: Светлогорск, Беларусь
- Поблагодарили: 2 раза
- Контактная информация:
На делфе ест следующий код:
Можно ли на С++ сделать подобное объявление для BaseFileMethods (структура описана, методы то же написаны, осталось только статическую структуру завести, а как сделать ее изначально заполненной - без понятия :( ).
Код: Выделить всё
pStreamMethods = ^TStreamMethods;
TStreamMethods = packed record
fSeek: function(Strm: TStream; MoveTo: TStrmMove; MoveMethod: TMoveMethod): TStrmSize;
fGetSiz: function(Strm: TStream): TStrmSize;
fSetSiz: procedure(Strm: TStream; Value: TStrmSize);
fRead: function(Strm: TStream; var Buffer; Count: TStrmSize): TStrmSize;
fWrite: function(Strm: TStream; const Buffer; Count: TStrmSize): TStrmSize;
fClose: procedure(Strm: TStream);
fCustom: Pointer;
fWait: procedure(Strm: TStream);
end;
Код: Выделить всё
var
BaseFileMethods: TStreamMethods = (
fSeek: SeekFileStream;
fGetSiz: GetSizeFileStream;
fSetSiz: SetSizeFileStream;
fRead: ReadFileStream;
fWrite: WriteFileStream;
fClose: CloseFileStream;
fCustom: nil;
);
[url=svn://forum.csmania.ru/andreil]Репозиторий с моими проектами[/url]
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
Занимаюсь переносом всех своих библиотек на С++, а так же созданием их кроссплатформенных версий.
В команду переводчиков манги "Ah! My Goddess!" требуются переводчики с английского и тайперы (последних можем обучить, главное - желание).
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
andreil
Для этого есть интерфейсы и наследования. Запили интерфейс из TStreamMethods и потом определяй функции в унаследовавшем сей интерфейс классе.
Для этого есть интерфейсы и наследования. Запили интерфейс из TStreamMethods и потом определяй функции в унаследовавшем сей интерфейс классе.
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
- Rama
- Модератор
- Сообщения: 1143
- Зарегистрирован: 28.03.2008
- Благодарил (а): 389 раз
- Поблагодарили: 240 раз
- Контактная информация:
Как заставить кириллицу корректно считываться в VS C++?
Прописал setlocale (LC_ALL, "rus"), но это дало только корректный вывод (напрямую или из константного массива, например).
При считывании в переменную записываются какие-то иероглифы.
Прописал setlocale (LC_ALL, "rus"), но это дало только корректный вывод (напрямую или из константного массива, например).
При считывании в переменную записываются какие-то иероглифы.
- ArsNG
- Полковник
- Сообщения: 3059
- Зарегистрирован: 20.12.2007
- Благодарил (а): 1069 раз
- Поблагодарили: 2893 раза
Skazlazhop
setlocale(LC_ALL, ".866");
(вывод кириллицы будет плохим)
Учитывай, что в DOS кодировка не такая, как в Win. Проще будет написать ф-ию по переводу из одной кодировки в другую, CharToOem вроде.
А еще правильнее вообще не использовать русский.
setlocale(LC_ALL, ".866");
(вывод кириллицы будет плохим)
Учитывай, что в DOS кодировка не такая, как в Win. Проще будет написать ф-ию по переводу из одной кодировки в другую, CharToOem вроде.
А еще правильнее вообще не использовать русский.
- Rama
- Модератор
- Сообщения: 1143
- Зарегистрирован: 28.03.2008
- Благодарил (а): 389 раз
- Поблагодарили: 240 раз
- Контактная информация:
ArsNG
Ок, нагуглил такое:
Корректно выводит ту кириллицу, которая была введена.
НО в переменной temp эта кириллица хранится в виде несуразицы. Например если ввести "Выход" - в temp будет "‚л室"
Наверное я некорректно задал вопрос, перефразирую:
Как заставить введенную кириллицу хранится в корректной форме в ячейке?
Ок, нагуглил такое:
Код: Выделить всё
{
string temp;
setlocale(LC_ALL,".1251");
cin >> temp;
setlocale(LC_ALL,".866");
cout << temp;
return 0;
}
НО в переменной temp эта кириллица хранится в виде несуразицы. Например если ввести "Выход" - в temp будет "‚л室"
Наверное я некорректно задал вопрос, перефразирую:
Как заставить введенную кириллицу хранится в корректной форме в ячейке?
- NiGHt-LEshiY
- Полковник
- Сообщения: 10258
- Зарегистрирован: 13.06.2008
- Откуда: Россия
- Благодарил (а): 752 раза
- Поблагодарили: 2667 раз
- Контактная информация:
Кириллица обычно не 1 байт на символ, а 2. Тебя интересуют функции, работающие с многобайтными кодировками.
И да, русский не нужен.
И да, русский не нужен.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.
Просьба присылать сообщения об ошибках в ЛС.
- Pr0Ger
- Модератор
- Сообщения: 1829
- Зарегистрирован: 16.01.2009
- Благодарил (а): 17 раз
- Поблагодарили: 214 раз
- Контактная информация:
Skazlazhop
смотри в чем фишка
виндовая консоль чрезвычайна крива, и использует в качестве кодировки не юникод, ни cp1251, ни даже cp1252, а cp866 (в русской винде, или с включенной русской локалью), которая использовалась в DOS еще
и поэтому возникают такие несоответствия, ибо с консоли прочитало в одной, а дебаггер показывает исходя из того, что это другая кодировка
и вообще говоря, оно сохранено корректно, просто для правильной интерпретации нужно знать в какой кодировке оно записано
так-что либо оставь все так как есть, либо переконвертируй это в нужную, либо не вводи кириллицу из консоли
если-что правильный вариант третий
именно поэтому кстати в Python 3 строки сделали юникодными, а то что раньше назывался строками стало bytes/bytearray
смотри в чем фишка
виндовая консоль чрезвычайна крива, и использует в качестве кодировки не юникод, ни cp1251, ни даже cp1252, а cp866 (в русской винде, или с включенной русской локалью), которая использовалась в DOS еще
и поэтому возникают такие несоответствия, ибо с консоли прочитало в одной, а дебаггер показывает исходя из того, что это другая кодировка
и вообще говоря, оно сохранено корректно, просто для правильной интерпретации нужно знать в какой кодировке оно записано
так-что либо оставь все так как есть, либо переконвертируй это в нужную, либо не вводи кириллицу из консоли
если-что правильный вариант третий
именно поэтому кстати в Python 3 строки сделали юникодными, а то что раньше назывался строками стало bytes/bytearray
- Rama
- Модератор
- Сообщения: 1143
- Зарегистрирован: 28.03.2008
- Благодарил (а): 389 раз
- Поблагодарили: 240 раз
- Контактная информация:
Вся соль в том, что на лабах дали доп. задание, в котором нужно вывести некий ответ на запрос, а т.к. основное задание подразумевало только числовой ввод, я сделал все потроха кириллицей. Ну и собственно препод ждет от меня именно сохранения диалога на великом и могучем, потому что как он сказал сам не знает, но ему интересно.
А уже в самом крайнем случае pridetsja peredelyvat' vse pod translit -_-
Всем выше и ниже отписавшимся спасибо, тему апать не буду, пойду попробую что-нибудь сделать.
А уже в самом крайнем случае pridetsja peredelyvat' vse pod translit -_-
Всем выше и ниже отписавшимся спасибо, тему апать не буду, пойду попробую что-нибудь сделать.
Последний раз редактировалось Rama 26.03.2012, 22:52, всего редактировалось 1 раз.
- Monk
- VIP
- Сообщения: 4713
- Зарегистрирован: 21.11.2009
- Благодарил (а): 418 раз
- Поблагодарили: 1053 раза
- Контактная информация:
Так ты же починил кириллицу на ввод и вывод, нэ?
-
- Разработчик
- Сообщения: 910
- Зарегистрирован: 09.01.2009
- Откуда: Переезжаю в /dev/null
- Благодарил (а): 7 раз
- Поблагодарили: 65 раз
- Контактная информация:
Skazlazhop
Для того чтобы кириллица хранилась в корректной форме, нужно сначала определить понятие корректная форма, а для этого - определить в каких типах данных вам нужно работать - то есть выбрать внутреннюю кодировку строк (если конечно вам нужна кириллица в строках ;), но скорее всего вам нужна именно она).
Лучше всего использовать Unicode и его кодировку UTF-8 - это во-первых хороший стиль, а во-вторых хорошая универсальность.
Внутренняя кодировка - это то, как строки буду храниться внутри вашей программы - то есть вы читаете строки в любой кодировке, потом приводите их к нужной и помещаете в память куда надо, и уже потом с ними работаете. При выводе - также только в обратном порядке.
PS: так выглядит правильный подход к решению проблемы, в случае, если впрямую делать лень, можно использовать всевозможные хаки... например сделать свой класс стримов, который вызывет смену локали для ввода-вывода... но по-хорошему, в вашем случае, нужно приводить при чтении 866 (стандартная консольная кодировка винды) к 65001 (UTF-8).
Для того чтобы кириллица хранилась в корректной форме, нужно сначала определить понятие корректная форма, а для этого - определить в каких типах данных вам нужно работать - то есть выбрать внутреннюю кодировку строк (если конечно вам нужна кириллица в строках ;), но скорее всего вам нужна именно она).
Лучше всего использовать Unicode и его кодировку UTF-8 - это во-первых хороший стиль, а во-вторых хорошая универсальность.
Внутренняя кодировка - это то, как строки буду храниться внутри вашей программы - то есть вы читаете строки в любой кодировке, потом приводите их к нужной и помещаете в память куда надо, и уже потом с ними работаете. При выводе - также только в обратном порядке.
PS: так выглядит правильный подход к решению проблемы, в случае, если впрямую делать лень, можно использовать всевозможные хаки... например сделать свой класс стримов, который вызывет смену локали для ввода-вывода... но по-хорошему, в вашем случае, нужно приводить при чтении 866 (стандартная консольная кодировка винды) к 65001 (UTF-8).
- kinders666
- Модератор
- Сообщения: 4163
- Зарегистрирован: 25.10.2006
- Откуда: Москва
- Благодарил (а): 537 раз
- Поблагодарили: 191 раз
Нужна помощь с Visual Basic 2010
Нужно сделать так, чтоб программа брала сведения из сети (например отсюда: http://pogoda.yandex.ru/moscow?ncrnd=7325) о температуре в Москве, потом записывала её в переменную. Не очень разбираюсь в интернет-функциях, кто поможет?
Сгодится любой другой сайт с информацией о погоде.
Нужно сделать так, чтоб программа брала сведения из сети (например отсюда: http://pogoda.yandex.ru/moscow?ncrnd=7325) о температуре в Москве, потом записывала её в переменную. Не очень разбираюсь в интернет-функциях, кто поможет?
Сгодится любой другой сайт с информацией о погоде.
- Squaller
- Лейтенант
- Сообщения: 182
- Зарегистрирован: 10.02.2012
- Благодарил (а): 10 раз
- Поблагодарили: 4 раза
- Контактная информация:
Народ,кто нибудь может помочь написать данную программу,думаю для знающих это дело 5 минут.
Мне нужно,чтобы эти кнопки на скрине Ctrl + C копировали текст из полей в буфер.Все остальное не важно.Заранее спасибо
Я делал на PHP.Но мне без разницы на каком языке будет сделана программа,главное чтобы работала и можно было запускать несколько копий программы,в моем случае это три
Мне нужно,чтобы эти кнопки на скрине Ctrl + C копировали текст из полей в буфер.Все остальное не важно.Заранее спасибо
Я делал на PHP.Но мне без разницы на каком языке будет сделана программа,главное чтобы работала и можно было запускать несколько копий программы,в моем случае это три
Вот сама программа (Скрин)
Последний раз редактировалось Squaller 28.03.2012, 18:27, всего редактировалось 4 раза.
Причина: Язык программирования?
Причина: Язык программирования?