С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436

Ошибка при использовании класса

26.02.2012, 22:18. Показов 1243. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил написать чат. Написал маленький класс сервера:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class ServChat
{
 private:
 unsigned int unNumber;
 unsigned int umNumber;
 
 public:
 ServChat::ServChat();
 
 vector<User> users;
 User Serv;
 void ClientJoining(AnsiString NickName, AnsiString IP, AnsiString Host);
 void SendToAll(AnsiString msg);
 inline int GetunNumber() const { return unNumber; }
 inline int GetumNumber() const { return umNumber; }
};
 
 
ServChat::ServChat()
{
 unNumber = 0;
 umNumber = 15;
};
 
void ServChat::SendToAll(AnsiString msg)
{
 for(int i = 0; i < unNumber; i++)
 fmServ->ServSock->Socket->Connections[i]->SendText(msg);
}
 
void ServChat::ClientJoining(AnsiString NickName, AnsiString IP, AnsiString Host)
{
 AnsiString Group = "USER";
 
 unNumber++;
 
 for(int i = 0; i < unNumber; i++)
 {
  if(users[i].IP == "")
  {
   users[i].IP = IP;
   users[i].Nick = NickName;
   users[i].Host = Host;
   users[i].Group = Group;
   fmServ->tUsers->Cells[0][i + 1] = users[i].Nick;
   fmServ->tUsers->Cells[1][i + 1] = users[i].IP;
 
   SendToAll(Time().TimeString() + ' ' + users[i].Nick + " Теперь с нами\n");
   break;
   }
  }
}
Почему если обработчик использует функцию класса, то дебагер выводит ошибку: Debugger Exeption Notification?

Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TfmServ::ServSockClientConnect(TObject *Sender,
      TCustomWinSocket *Socket)
{
 Socket->SendText(Time().TimeString() + " Приветствуем вас в нашем чате\n");
 fmServ->rMsg->Text = rMsg->Text + Time().TimeString() + " Установлена связь с " + Socket->RemoteHost + '\n';
 
 AnsiString info = Socket->ReceiveText();
 int pos = info.AnsiPos(':');
 AnsiString Nick = info.SubString(1, pos - 1);
 info.Delete(1, pos);
 
 pos = info.AnsiPos(':');
 AnsiString IP = info.SubString(1, pos - 1);
 AnsiString Host = info.SubString(pos + 1, info.Length());
 
 Chat.ClientJoining(Nick, IP, Host);
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.02.2012, 22:18
Ответы с готовыми решениями:

Ошибка при использовании экземпляра класса
Всем здравствуйте. Есть класс, суть которого - одна функция записывающая массив вещественных значений в файл с определённым именем (один...

Ошибка Access Violation при использовании vector внутри класса
Проблема в следующем: имеется пользовательский класс. Три поля в классе - векторы, один из которых двумерный. Первое создание экземпляра...

Ошибка при использовании ADOConnection
Здравствуйте! Нужна ваша помощь) Щелкаю дважды на ADOConnection1 и, соответственно, нажимаю &quot;Build...&quot;. И тут выскакивает...

12
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
26.02.2012, 23:08
1. что то не где у Вас в коде не видать "push_back", а это команда добавить в вектор.
2. >>
C++
1
vector<User> users
на всякий случай может лучше вот так:
C++
1
std::vector<User> users
3. Я обычно предпочитаю делать так
C++
1
vector<User*> users
И вручную управлять созданием и уничтожением объектов.
0
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 10:37  [ТС]
Проблема не в векторе. Я заменил его на массив, но проблема осталась.
0
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
27.02.2012, 11:04
Покажите как Вы добавляете в массив новый элемент структуры User
0
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 11:08  [ТС]
Закоментил 3 строчки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void ServChat::ClientJoining(AnsiString NickName, AnsiString IP, AnsiString Host)
{
 AnsiString Group = "USER";
 
 unNumber++;
 
 for(int i = 0; i < unNumber; i++)
 {
  if(users[i].IP == "")
  {
   users[i].IP = IP;
   users[i].Nick = NickName;
   users[i].Host = Host;
   users[i].Group = Group;
   //fmServ->tUsers->Cells[0][i + 1] = users[i].Nick;
   //fmServ->tUsers->Cells[1][i + 1] = users[i].IP;
 
   //SendToAll(Time().TimeString() + ' ' + users[i].Nick + " Òåïåðü ñ íàìè\n");
   break;
   }
  }
}
И всё прекрасно работает. Непойму в чём дело..
0
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
27.02.2012, 11:21
Может вот это поможет: http://cbuilder.ru/index.php?topic=7819.0;wap2
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
27.02.2012, 11:52
а tUsers - это что? если это листвью - добавляете ли вы в него новую строку?
0
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 11:55  [ТС]
StringGrid
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
27.02.2012, 13:09
думаю что надо добавлять. наивно было бы предположить что StringGrid простирается на бесконечность вниз и вправо.
0
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 13:41  [ТС]
В StringGrid можно задать количество ячеек вниз и вправо. у меня 16 вниз и 2 вправо
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
27.02.2012, 15:14
может тогда i+1 не нужно делать?
0
60 / 57 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 18:32  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
может тогда i+1 не нужно делать?
i + 1 - указывает нужную ячейку, а не добавляет её.
0
Модератор
 Аватар для vxg
3407 / 2178 / 354
Регистрация: 13.01.2012
Сообщений: 8,448
27.02.2012, 21:08
это я понял, я в смысле - может нужно вместо i + 1 писать i
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.02.2012, 21:08
Помогаю со студенческими работами здесь

Ошибка при использовании конструктора
Вот написал часть программы на С++, захотел проверить, но выбило ошибку Unit1.cpp(104): E2294 Structure required on left side of . or .*...

Ошибка при использовании парсера
Нашёл статью: http://www.rsdn.ru/article/files/Classes/tparser.xml Там есть пример использования парсера. НО при попытке...

Ошибка при использовании TServerSocket
Здраствуйте, у меня в проекте 2 формы на первой форме есть TServerSocket при отправке текста таким образом ...

Ошибка при использовании MsiEnumProducts
Всем Добрый вечер. Ребята проблема такая, написал код, но при компиляции выдает ошибки msi.h(776): E2015 Ambiguity between 'PHKEY'...

Ошибка при использовании метода Ole Add
При использовании метода OLE Add появляется сообщение об ошибке: Project Project1.exe raised exception class EOleSysError with message 'The...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru