Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
SanychBY
39 / 46 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
#1

Привести указатель на класс к указателю на void - C++

12.10.2015, 10:08. Просмотров 596. Ответов 22
Метки нет (Все метки)

Хай
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
#pragma once
#include "list.h";
#include "Print.h";
 
 
class Robot
{
public:
    Robot();
    ~Robot();
    template<typename T>
    void Set(T p)
    {
        if (Header == NULL)
        {
            list *l = new list(NULL,NULL,(void*)&p);
            Header = Last = l;
        }
        else
        {
            list *l = new list(NULL, Last, (void*)&p);
            Last = l;
        }
    }
    template <typename Ppr,typename Pdata>
    void PrintAll()
    {
        MyPrint *PointPrint;
        PointPrint = new Ppr;
        list *t = Header;
        while (t)
        {
            PointPrint->Pr((Pdata&)t->data);//необходимо преобразовать void * в Rose;
        }
    }
private:
 
};
 
Robot::Robot()
{
}
 
Robot::~Robot()
{
    if (Header!=NULL)
    {
        list *t = Header;
        while (t)
        {
            delete t;
        }
    }
}
list *l = new list(NULL,NULL,(void*)&p); привожу Rose к void *, но потом мне нужно сделать обратное, void * привести к Rose. Подскажите как это сделать, а то компилятор ругается. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.10.2015, 10:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Привести указатель на класс к указателю на void (C++):

Как преобразовать указатель на класс к указателю на асбтрактный класс? - C++
Но тут есть одна тонкость- два промежуточных класса. Вот код, надеюсь всё из него понятно. #include &lt;stdio.h&gt; ...

Функция принимает указатель на void и возвращает указатель на int - C++
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Массив по указателю void* - C++
Как сравнивать элементы массива имея указатель void* на него, размер массива и размер в байтах одного элемента?

Преобразование указателя void к указателю на структуру - C++
Здравствуйте! Можете объяснить эти строки в программе? int cmp(const void* p1, const void* p2) { return...

Доступ к пользовательскому класу по void указателю - C++
Здравствуйте, есть указатель void* pointer = 0; //указатель на объект Известно, на какой именно тип объекта ссылается указатель. ...

Привести string к void* - C++
Здравствуйте. Как привести переменную типа string к void*? спасибо.

22
nmcf
5355 / 4675 / 1566
Регистрация: 14.04.2014
Сообщений: 18,636
12.10.2015, 10:20 #2
Что за Rose?
0
SanychBY
39 / 46 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 10:28  [ТС] #3
nmcf, класс
0
nmcf
5355 / 4675 / 1566
Регистрация: 14.04.2014
Сообщений: 18,636
12.10.2015, 12:15 #4
Ну приводи так же, как к void. Там есть иерархия какая-то, общий предок?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,534
Завершенные тесты: 1
12.10.2015, 12:17 #5
Цитата Сообщение от SanychBY Посмотреть сообщение
но потом не нужно сделать
Не нужно или мне нужно?
0
SanychBY
39 / 46 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 12:33  [ТС] #6
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Не нужно или мне нужно?
Мне нужно

Добавлено через 2 минуты
Цитата Сообщение от nmcf Посмотреть сообщение
Ну приводи так же, как к void. Там есть иерархия какая-то, общий предок?
list это класс списка, Robot работает с этим списком (добавляет новый элемент, печатает его). Объект класса Rose я помещаю в список с помощью Robot.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 12:38 #7
C++
1
2
3
Rose * ptr = //что то там
void * vptr = reinterpret_cast<void*>(ptr);
Rose * nptr = reinterpret_cast<Rose*>(vptr);
а откуда вообще Rose взяля О_о ?
0
nmcf
5355 / 4675 / 1566
Регистрация: 14.04.2014
Сообщений: 18,636
12.10.2015, 12:39 #8
Почему тип элемента списка не сделать указателем на Rose? Зачем там void?

Добавлено через 46 секунд
aLarman, а простое приведение как с void и примере не сработает, что ли?
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 12:52 #9
Цитата Сообщение от nmcf Посмотреть сообщение
aLarman, а простое приведение как с void и примере не сработает, что ли?
ну как бе си стайл си++ стайл
0
nmcf
5355 / 4675 / 1566
Регистрация: 14.04.2014
Сообщений: 18,636
12.10.2015, 12:58 #10
void* уже не C++ стайл.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 13:15 #11
nmcf, просветите что тогда должно быть?
0
nmcf
5355 / 4675 / 1566
Регистрация: 14.04.2014
Сообщений: 18,636
12.10.2015, 13:28 #12
Указатель на класс предок, наверное. Типа object в C#.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 13:56 #13
nmcf, мы о разных вещах говорим, ТС попросил как перевести из конкретного типа в войд и обратно, я привел пример, а как должно быть на самом деле я не вникал
0
SanychBY
39 / 46 / 1
Регистрация: 04.06.2013
Сообщений: 1,532
12.10.2015, 13:59  [ТС] #14
Цитата Сообщение от nmcf Посмотреть сообщение
Почему тип элемента списка не сделать указателем на Rose? Зачем там void?
Хочется создать что-то на подобии библиотеки. void позволяет не привязываться к типу данных.
0
aLarman
642 / 563 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
12.10.2015, 14:00 #15
почитайте тогда про идиому TypeErasure
0
12.10.2015, 14:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2015, 14:00
Привет! Вот еще темы с ответами:

Указатель на void - C++
Как можно сделать универсальную функцию, которая принимает указатель на неопределенный тип, увеличивает значение на которое указывает этот...

Не удается запустить указатель метода по указателю класса - C++
Первый класс - бесцветная (белая) линия, Второй класс - цветная линия. Если взять два указателя на данные классы и по ним указатель...

Указатель типа void - C++
Добрый день. enum Type { Double, Int, Float }; void func(int k,enum Type t,...) { void *pv; pv = (...); ... }

Указатель void на структуру - C++
Есть некий тип структуры action. Для функции _beginthread третьим параметром требуется указатель на void. Как преобразовать структуру в...


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

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

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