Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Builder
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
1

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

26.02.2012, 22:18. Просмотров 844. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2012, 22:18
Ответы с готовыми решениями:

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

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

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

Ошибка при использовании MsiEnumProducts
Всем Добрый вечер. Ребята проблема такая, написал код, но при компиляции...

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

12
_engineer_
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
26.02.2012, 23:08 2
1. что то не где у Вас в коде не видать "push_back", а это команда добавить в вектор.
2. >>
C++
1
vector<User> users
на всякий случай может лучше вот так:
C++
1
std::vector<User> users
3. Я обычно предпочитаю делать так
C++
1
vector<User*> users
И вручную управлять созданием и уничтожением объектов.
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 10:37  [ТС] 3
Проблема не в векторе. Я заменил его на массив, но проблема осталась.
0
_engineer_
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
27.02.2012, 11:04 4
Покажите как Вы добавляете в массив новый элемент структуры User
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 11:08  [ТС] 5
Закоментил 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
_engineer_
117 / 74 / 6
Регистрация: 23.01.2012
Сообщений: 186
27.02.2012, 11:21 6
Может вот это поможет: http://cbuilder.ru/index.php?topic=7819.0;wap2
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,950
27.02.2012, 11:52 7
а tUsers - это что? если это листвью - добавляете ли вы в него новую строку?
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 11:55  [ТС] 8
StringGrid
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,950
27.02.2012, 13:09 9
думаю что надо добавлять. наивно было бы предположить что StringGrid простирается на бесконечность вниз и вправо.
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 13:41  [ТС] 10
В StringGrid можно задать количество ячеек вниз и вправо. у меня 16 вниз и 2 вправо
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,950
27.02.2012, 15:14 11
может тогда i+1 не нужно делать?
0
SDmaN
56 / 53 / 8
Регистрация: 22.07.2011
Сообщений: 436
27.02.2012, 18:32  [ТС] 12
Цитата Сообщение от vxg Посмотреть сообщение
может тогда i+1 не нужно делать?
i + 1 - указывает нужную ячейку, а не добавляет её.
0
vxg
Модератор
3252 / 2052 / 323
Регистрация: 13.01.2012
Сообщений: 7,950
27.02.2012, 21:08 13
это я понял, я в смысле - может нужно вместо i + 1 писать i
0
27.02.2012, 21:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 21:08

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

Ошибка при использовании конструктора
Вот написал часть программы на С++, захотел проверить, но выбило ошибку ...

Ошибка при использовании метода Ole Add
При использовании метода OLE Add появляется сообщение об ошибке: Project...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru