Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
 Аватар для koker007
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 731

Как поменять тип данных у указателя?

07.12.2016, 13:17. Показов 1797. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, уже часа 3 маюсь, все никак не могу поменять тип данных... это надо для отправки по сокету..

Значит по сокету у меня отправляется этот главный класс

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
53
54
55
56
57
//Класс в котором описываются все данные получаемые и отправляемые из сокета
class socket {
private:
    //Для проверки коректности данных все ID должны быть равны
    GLshort Sock_ID_1 = 0;
    GLshort Sock_ID_2 = 0;
    GLshort Sock_ID_3 = 0;
 
    //Тип полученных данных
    //Говорит о том какого рода данные были отправленны или полученны чтобы понять как их дальше обработать
    GLshort Type_data = 0;
    GLuint Size_data = 0;
 
    //Хранит данные которые нужно будет обработать
    GLbyte data_sock[1000];
 
    GLbyte Test_ID (){
        if (Sock_ID_1 != 0 && Sock_ID_1 == Sock_ID_2 && Sock_ID_2 == Sock_ID_3)
            return 'y';
        else
            return 'n';
    }
 
    //Проверяет соответствие размера полученного класса с классом из программы
    GLbyte Test_Data(){
        if (Type_data == 0) {
            //Пустой сокет
            return 'n';
        }
        //Тип класса 
        else if (Type_data == 1 && Size_data == sizeof(TDSocket_1_player)){
            return 'y';
        }
        else if (Type_data == 2 && Size_data == sizeof(TDSocket_2_message)) {
            return 'y';
        }
        else if (Type_data == 3 && Size_data == sizeof(TDSocket_3_serv_com)) {
            return 'y';
        }
        else return 'n';
    }
public:
    GLbyte Get_data() {
        if (Test_ID() != 'y') {
            return 'n';
        }
        if (Test_Data() != 'y') {
            return 'n';
        }
        
        //Данные прошли проверку
        //Начинается занесение данных
        if (Type_data == 1) {
            TDS_1 = static_cast<TDSocket_1_player*> (data_sock[0]);
        }
    }
};
Этот класс несет в себе информацию о подклассе который начинается там же где начинается GLbyte data_sock[1000]; Какой именно класс зашифрован там говорит Type_data.

У меня вся проблема в этом участке
C++
1
2
3
        if (Type_data == 1) {
            TDS_1 = static_cast<TDSocket_1_player*> (data_sock[0]);
        }
Мне надо каким-то образом переназначить указатель data_sock[0] с типа GLbyte на мой пользовательский класс который описан ниже
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class TDSocket_1_player {
private:
    GLuint id_player = 0;
    GLbyte serv_adm_pas[10];
    GLbyte name[16];
    GLshort id_image = 0;
 
    void operator = (TDSocket_1_player TDS_1_time) {
        id_player = TDS_1_time.id_player;
        for (int i = 0; i < 10; i++) {
            serv_adm_pas[i] = TDS_1_time.serv_adm_pas[i];
        }
        for (int i = 0; i < 16; i++) {
            name[i] = TDS_1_time.name[i];
        }
        id_image = TDS_1_time.id_image;
    }
};
TDSocket_1_player TDS_1;
Я пробовал static_cast и dynamic_cast и (TDSocket_1_player*)data_sock[0] Но все как то не удалось...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2016, 13:17
Ответы с готовыми решениями:

Почему увеличение указателя на sizeof(тип) не тождественно инкременту этого же указателя?
Всем доброго дня.:) Можете обьяснить ,почему при инкриментировании указателя,его значение(адресс) увеличивается на 4 (размер int в...

Как изменить тип указателя массива ?
Например создаю массив: void * mass; if(1 == 1) mass = wchar_t; else mass = char; Пример конечно ппц какой бред, но если...

Как определить тип указателя shared_ptr<T>?
Прошу не удалять, в с++ для начинающих не смогли мне ответить есть классы: class char_int { public: char_int(int...

2
4 / 4 / 5
Регистрация: 25.08.2016
Сообщений: 44
07.12.2016, 13:35
Наверное потому что data_sock[0] - не указатель?
C++
1
(TDSocket_1_player*)(&data_sock[0])
1
 Аватар для koker007
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 731
07.12.2016, 13:38  [ТС]
Цитата Сообщение от teatralaik Посмотреть сообщение
Наверное потому что...
Спасибо... но уже решил... я оказывается оператор '=' в классе не сделал public. Извиняюсь за суету.

C++
1
2
3
        if (Type_data == 1) {
            TDS_1 = (TDSocket_1_player*)&data_sock;
        }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class TDSocket_1_player {
private:
    GLuint id_player = 0;
    GLbyte serv_adm_pas[10];
    GLbyte name[16];
    GLshort id_image = 0;
 
public:
    void operator = (TDSocket_1_player* TDS_1_time) {
        id_player = TDS_1_time->id_player;
        for (int i = 0; i < 10; i++) {
            serv_adm_pas[i] = TDS_1_time->serv_adm_pas[i];
        }
        for (int i = 0; i < 16; i++) {
            name[i] = TDS_1_time->name[i];
        }
        id_image = TDS_1_time->id_image;
    }
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2016, 13:38
Помогаю со студенческими работами здесь

Как привести тип умного указателя к указателю на void?
Изучаем WinAPI, необходимо выполнить задание: Написать программу, которая в одном потоке сохраняет в векторе структуры PROCESSENTRY32,...

Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов?
Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов? Если есть то как он называется ?

Узнать тип значения, зная тип указателя
Здравствуйте! Есть такой код: template&lt;class Iter&gt; void func(Iter first, Iter last) { //... Iter_value_type = *first;...

Как мне конвертировать адрес указателя (например 00A88B68) в тип string ? C++
вопрос в имени темы

9 строка. выражение должно иметь тип указателя на объект. как исправить?
#include &quot;pch.h&quot; #include &lt;iostream&gt; using namespace std; const int razm = 100; void z0(int mass, int n, int a, int b) { ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru