Вопрос № 51777: Здравствуйте!!!
В чем тут проблема?
Ошибку выбивает в Unit1.cpp в этом фрагменте
void F3(char Ch)
{
Form1->label1->Caption = Form1->Label1->Caption + Ch + Form1->Ch1;
}
Я изучаю С++ совсем недавно, поэтому...Вопрос № 51857: Добрый день! У меня вопрос относительно ООП.
Задача:
Создать класс(Model) для хранения, отображения и т.д. модели какой-либо фигуры состоящей из точек(Vertex).
Вопрос заключается в следующем: каким образом можно задать динамический м...Вопрос № 51869: Уважакмые эксперты!
Подскажите, где можно найти информацию по написанию firewall'a?...
Вопрос № 51.777
Здравствуйте!!!
В чем тут проблема?
Ошибку выбивает в Unit1.cpp в этом фрагменте
void F3(char Ch)
{
Form1->label1->Caption = Form1->Label1->Caption + Ch + Form1->Ch1;
}
Я изучаю С++ совсем недавно, поэтому пример взят из учебника
Навсякий случай полностью код Unit1.cpp
//---------------------------------------------------------------------------
Отправлен: 10.08.2006, 19:42
Вопрос задал: ataman (статус: 2-ой класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Physicist
Здравствуйте, ataman!
В C++ различаются заглавные и строчные буквы. Поэтому компилятор выдает ошибку на label1, т.к. в классе объявлена только Label1.
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 10.08.2006, 19:53 Оценка за ответ: 5 Комментарий оценки: Спасиба!!! Я забыл про это
Отвечает: Шальков Павел Владимирович
Здравствуйте, ataman!
Язык С++ - регистрозависимый, поэтому в строке Form1->label1 - ошибка, правильно Form1->Label1. Удачи!
Отвечает: Виктор Пырлик
Здравствуйте, ataman!
Нельзя работать со строковым массивом и одиночным символом в одной операции.
Надо привести или символ к строке или конкретно указать элемент строкового массива.
Свойство Caption имеет тип AnsiString, а работаете с типом char - одиночный символ (короткое целое). В случае однократного использования, Builder "прощает" у вас же встречается повторы [Form1->Label1->Caption + Ch + Form1->Ch1].
можно например так: Form1->Label1->Caption + String(Ch) +String(Form1->Ch1)
- один из вариантов...
--------- Не результат важен, процесс есть двигатель всего!
Ответ отправил: Виктор Пырлик (статус: 2-ой класс)
Ответ отправлен: 11.08.2006, 06:49
Вопрос № 51.857
Добрый день! У меня вопрос относительно ООП.
Задача:
Создать класс(Model) для хранения, отображения и т.д. модели какой-либо фигуры состоящей из точек(Vertex).
Вопрос заключается в следующем: каким образом можно задать динамический массив для хранения точек? Т.е. можно создать класс и обозначить там заранее массив из 100 вертексов. Но если модель состоит из 5? Тратится память. Если из 120, то ошибка )
Т.е. как можно динамически изменять в классе количество точек?
Класс вертекса
class Vertex
{
public:
float x;
float y;
float z;
}
Класс модели
class Model
{
public:
Vertex Massiv[100];
}
Что нужно изменить?
Заранее спасибо.
Отправлен: 11.08.2006, 14:47
Вопрос задал: PollyRC (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Physicist
Здравствуйте, PollyRC!
Нужно в классе хранить только указатель на данные. В конструкторе класаа память будет выделяться (под нужное число элементов), в деструкторе - освобождаться. Пример см. в Приложении.
Также можно использовать библиотеку STL:
#include
...//Пример объявления массива
vector Massiv;
..//Пример добавления данных
Massiv.push_back( Vertex1 );
Massiv.push_back( Vertex2 );
Massiv.push_back( Vertex3 );
...//Пример доступа к данным
Vertex1 = Massiv[1];
Приложение:
Ответ отправил: Physicist (статус: Студент)
Ответ отправлен: 11.08.2006, 15:05
Отвечает: Шинтяков Дмитрий Васильевич / Ratson
Здравствуйте, PollyRC!
Она содержит готовые решения для массы таких задач, о которых вы даже не задумавались ^_^ Писать на С++ без шаблонов - всё равно, что ездить на велосипеде, отталкиваяь от земли ногами.
В частности, динамически изменяемый массив из Vertex записывается так:
include <vector>
....
std::vector<Vertex> Massiv;
Massiv.resize(100);
Благодаря перегрузке операторов, работать с таким массивом можно как с обычным
std::cout<<Massiv[5].x;
Вообще, при программировании на С++ рекомендуется избегать С-шного стиля работы с массивами, и пользоваться контейнерами STL, которые более более удобны и зачастую надёжны (дуракоустойчивы).
Благодаря тому, что библиотека шаблонная, её классы имеют минимальные накладные расходы.
1. Хранить информацию блоками в списке
+ Быстро добавляет элементы (в том числе и в середину)
+ Легко пройти список
+ Легко удалить элемент
+ Хранится по три вертекса сразу (удобно выводить на экран в OpenGL)
- Навигация по списку возможна только вперёд
- Нельзя выбрать конкретный элемент (точнее можно, но долго)
- Сложно сортировать
2. Хранить информацию на предварительно выделеной странице памяти
+ Не даёт модели попасть на стык страниц памяти
+ У программы всегда будет запас памяти на модели
+ Можно дефрагментировать память
+ Можно максимально компактно использовать память
+ Можно подготовить информацию для DX9 достаточно быстро
+ Навигация как в массиве
+ Легко удалить
- Нужно дефрагментировать память
- Выбирается целая страница памяти, если целых нет, то fatal error...
--- Сложно реализовать
Если что-нибудь заинтересует, вышлю реализацию по почте, т.к. громоздко
--------- Лозунг???
Ответ отправил: C4tnt (статус: 1-ый класс)
Ответ отправлен: 11.08.2006, 21:41
Отвечает: Ross
Здравствуйте, PollyRC!
Для динамического выделения памяти можно использовать несколько способов.
Рассмотрим случай выделения памяти для 100 точек.
1)В объявлении переменных класса вы должны поставить указатель:
class Model
{
public:
Vertex *Massiv;
};
Далее в конструкторе класса используете оператор new или GlobalAlloc:
Massiv = new Vertex[100];
Massiv = (Vertex *)GlobalAlloc(GPTR,sizeof(Vertex)*100);
В деструкторе используете оператор delete или GlobalFree:
delete Massiv;
GlobalFree(Massiv);
2)В начало файла пишете #include <vector>
В объявлении класса:
class Model
{
vector <Vertex> Massiv;
};
В конструкторе:
Massiv.resize(100);
В деструкторе:
Massiv.resize(0);
В таком случае, чтобы определить координату x точки номер 10:
float x = Massiv[10].x;
Ответ отправил: Ross (статус: 1-ый класс)
Ответ отправлен: 12.08.2006, 21:48 Оценка за ответ: 5 Комментарий оценки: Спасибо, изучаю Std :)
Вопрос № 51.869
Уважакмые эксперты!
Подскажите, где можно найти информацию по написанию firewall'a?
Отвечает: dianacode
Доброе время суток, Корсак Александр Юрьевич
очень интересная задача ) тут ещё можно подумать насчёт реализации - всё зависиот от того, какую платформу вы будете использовать, для никсов это будет реально и понятно, для вин32 - более трудоёмко
есть вариант на управление и отслеживание цепочек именно на си для никсов(*nix) - проект agt - http://sourceforge.net/projects/agt/
а вообще под никс можно предложить массу решений - всё зависит от разоаботчика и фантазий + используемые инструменты
с уважанием, удачи
--------- There is more than one way to do it
Ответ отправила: dianacode (статус: 3-ий класс)
Ответ отправлен: 11.08.2006, 20:40
Отвечает: Rusfaq mustdie
Здравствуйте, Корсак Александр Юрьевич!
http://www.codeproject.com/internet/#Proxy+%2F+Firewall - здесь есть примеры.
--------- Rusfaq mustdie
Ответ отправил: Rusfaq mustdie (статус: Заблокирован)
Ответ отправлен: 11.08.2006, 21:44