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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.76
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
#1

Указатель void на структуру - C++

24.07.2010, 20:16. Просмотров 2678. Ответов 15
Метки нет (Все метки)

Есть некий тип структуры action. Для функции _beginthread третьим параметром требуется указатель на void. Как преобразовать структуру в указатель типа void? Если попробовать (void *)pParams пишет:
error C2440: приведение типов: невозможно преобразовать 'action' в 'void *'
pParams - переменная типа action.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.07.2010, 20:16     Указатель void на структуру
Посмотрите здесь:

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

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

Указатель типа void c++ - C++
Haпример указатель типа void*ptr char *p void *ptr="abs"; p=((char *)ptr);Так указатель неопределённого типа, присваивается к...

Чем плохой указатель на void? - C++
Здравствуйте! Недавно прочитал статью на хабре http://habrahabr.ru/post/102930/ Сабж - архитектура игрового двигла, а именно менеджер...

Арифметика указателей (указатель на void*) - C++
У меня есть указатель на void*, который я получил с помощью void *beginPointer = VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);Мне...

Обобщенный указатель типа void - C++
В приложенной картинке рассказывается о динамическом распределении памяти в С. Сказано, что функция malloc() возвращает указатель типа...

Привести указатель на класс к указателю на void - C++
Хай #pragma once #include "list.h"; #include "Print.h"; class Robot { public:

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 20:31     Указатель void на структуру #2
Bazan, структуру размести в динамической памяти и преобразуй указатель.
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 20:46  [ТС]     Указатель void на структуру #3
Проблема исчерпана - надо было всего-лишь обьявить pParams как указатель. Но теперь возникла новая проблема -на строчке:
C++
1
pParams->fNum=Num;
Вылезает необратотанное исключение в "0x...", нарушение прав доступа при записи в "0x...".

На эту-же строчку выдает предупреждение
"warning C4700: использована неинициализированная локальная переменная "pParams"",
не смотря на то, что pParams инициализирована одной строчкой выше. Вопрос -почему?

Структура выглядит так:
C++
1
2
3
4
5
struct action
{
        FP fNum,sNum,rNum;
        int i;
};
pParams инициализирована так:
C++
1
action *pParams;
FP - мой класс. Num - переменная типа FP.
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
24.07.2010, 21:19     Указатель void на структуру #4
покажи весь код ничего ведь не понять
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 21:26  [ТС]     Указатель void на структуру #5
Цитата Сообщение от лендер Посмотреть сообщение
покажи весь код ничего ведь не понять
Весь? 768 строчек класса и 120 строчек функции main? Оно тебе надо?
Будем считать, что код таков(Он принципиально такой-же. Правда ошибка другая вылазит - "Run-Time Check Failure #3 - The variable 'pParams' is being used without being initialized."):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
struct action
{
                int fNum;
};
 
int main()
{
    action *pParams;
    int Num=1;
    pParams->fNum=Num;
    return 0;
}
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
24.07.2010, 21:36     Указатель void на структуру #6
в єтом коде нет ошибок, она где-то спряталась

Добавлено через 1 минуту
_beginthread покажи хоть єту функцию
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 21:39  [ТС]     Указатель void на структуру #7
Цитата Сообщение от лендер Посмотреть сообщение
в єтом коде нет ошибок, она где-то спряталась
В этом коде нет ошибок? Ты скомпилируй сначала.
Показать _beginthread? Вот её вызов: _beginthread( Thread, 0, (void *)pParams );
А сама функция где-то в <process.h>
лендер
46 / 46 / 2
Регистрация: 12.01.2010
Сообщений: 183
24.07.2010, 21:41     Указатель void на структуру #8
компилируется в борланд 3.1
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 21:44  [ТС]     Указатель void на структуру #9
Цитата Сообщение от лендер Посмотреть сообщение
компилируется в борланд 3.1
А запустить? В Microsoft Visual Studio 2008 вылазит окно с "Run-Time Check Failure #3 - The variable 'Num' is being used without being initialized."
И еще при компиляции появляются варнинги на 12 строчку
warning C4700: использована неинициализированная локальная переменная "Num"
warning C4700: использована неинициализированная локальная переменная "pParams"
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 22:06     Указатель void на структуру #10
Bazan, память под pParams не выделена, осюда и ошибка:
C++
1
2
3
4
5
6
7
8
action *pParams = new action;
 
int Num=1;
pParams->fNum=Num;
 
delete pParams;
 
return 0;
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 22:47  [ТС]     Указатель void на структуру #11
Новая ошибка: "error C2100: недопустимое косвенное обращение", повторяется трижды, ругается на эту строчку:
C++
1
*tParams->rNum->Num[*tParams->i+1]=*tParams->fNum->Num[*tParams->i+1]+*tParams->sNum->Num[*tParams->i+1];
В каком именно месте там косвенное обращение?
"Весь" код:
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
#include <iostream>
#include <process.h>
struct action
{
                FP *fNum,*sNum,*rNum;
                int *i;
};
void ThreadPlus( void* pParams )
{ 
    action *tParams;
    tParams=(action*)pParams;
 
    while(*tParams->i<PND)
        *tParams->rNum->Num[*tParams->i+1]=*tParams->fNum->Num[*tParams->i+1]+*tParams->sNum->Num[*tParams->i+1];
 
    _endthread();
}
void main()
{   FP fNum,sNum,rNum;//и присвоены какие-то значения, для простоты считаем, что FP это класс, содержащий массив Num из PND элементов типа int
    int i;//и присвоено какое-то значение.
    action *pParams = new action;
 
    pParams->fNum=&fNum;
    pParams->sNum=&sNum;
    pParams->rNum=&rNum;
    pParams->i=&i;
 
        
    _beginthread( ThreadPlus, 0, (void *)pParams );
    for(i=0;i<PND;i+=2)
            rNum.Num[i]=fNum.Num[i]+sNum.Num[i];
    delete pParams;
}
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 22:53     Указатель void на структуру #12
Bazan, давайте договоримся так, если вы задаете вопрос, предоставте всю необходимую информацию для ответа. Так будет проще и вам и отвечающим.
Цитата Сообщение от Bazan Посмотреть сообщение
FP
Что это за класс? Перегружен ли оператор []?
Bazan
22 / 22 / 0
Регистрация: 15.04.2009
Сообщений: 100
24.07.2010, 22:59  [ТС]     Указатель void на структуру #13
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Bazan, давайте договоримся так, если вы задаете вопрос, предоставте всю необходимую информацию для ответа. Так будет проще и вам и отвечающим.

Что это за класс? Перегружен ли оператор []?
Я же в комментарии к строке 19 написал "для простоты считаем, что FP это класс, содержащий массив Num из PND элементов типа int". Зачем перегружать оператор []?
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
24.07.2010, 23:09     Указатель void на структуру #14
Поле Num класса FP какой тип имеет?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2010, 05:35     Указатель void на структуру
Еще ссылки по теме:

Преобразование void* в структуру - C++
Как преобразовать HANDLE в структуру? В C# возможно написание следующего кода: public static extern IntPtr OpenFileMapping(int...

указатель на void в иерархии классов. можно ли так делать? - C++
здравствуйте! Такое дело: мне нужно написать иерархию классов для работы с таблицей. базовый класс - это просто таблица, а производный...

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

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

Приведение void* к типу указателя на структуру - C++
Тема обсуждалась здесь, но решения так и нет нормального Есть два (и более, хоть до 20) линейных списков и функция обхода списка В...


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

Или воспользуйтесь поиском по форуму:
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.07.2010, 05:35     Указатель void на структуру #15
Цитата Сообщение от Bazan
В каком именно месте там косвенное обращение?
C++
1
2
3
4
    while (*tParams->i < PND)
        *tParams->rNum->Num[*tParams->i + 1] =
        *tParams->fNum->Num[*tParams->i + 1] +
        *tParams->sNum->Num[*tParams->i + 1];
переноси на другие строки, чтобы определить
Yandex
Объявления
25.07.2010, 05:35     Указатель void на структуру
Ответ Создать тему
Опции темы

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