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

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

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

Author24 — интернет-сервис помощи студентам
Здравствуйте, уже часа 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2016, 13:17
Ответы с готовыми решениями:

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

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

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

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

2
4 / 4 / 5
Регистрация: 25.08.2016
Сообщений: 44
07.12.2016, 13:35 2
Наверное потому что data_sock[0] - не указатель?
C++
1
(TDSocket_1_player*)(&data_sock[0])
1
59 / 52 / 11
Регистрация: 04.08.2015
Сообщений: 726
07.12.2016, 13:38  [ТС] 3
Цитата Сообщение от 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
07.12.2016, 13:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2016, 13:38
Помогаю со студенческими работами здесь

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

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

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

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

typeid определяет тип указателя на базовый класс, как тип "базовый класс". Вне зависимости от присвоенного ему значения
Вот код: #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;windows.h&gt;...

Поменять стандартный тип данных
Народ, помогите с вопросом. В С++ стандартным типом данных является int. Как поменять это на что-то...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru