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

Приведение типов - C++

Восстановить пароль Регистрация
 
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 102
13.09.2013, 04:00     Приведение типов #1
Необходимо привязать адрес массива double по указателю к адресу структуры. Массив сам создан в другом приложении. Если использовать передачу в функцию, то все проходит нормально. Однако если передавать адрес массива из через конструктор класса в метод класса, то происходит ошибка "аргумент типа double несовместим с параметром типа const CTimeSeries::ContentTipeSeries"

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
#pragma once
 
class CTimeSeries
    {
    protected:
        int new_size;
        #pragma pack (push, 1)
        struct ContentTimeSeries
            {
            unsigned int      ctm;
            double            open;
            double            low;
            double            high;
            double            close;
            double            vol;
            };
        #pragma pack (pop)
        double GetRatesItemValue(const ContentTimeSeries* rates,const int rates_total,const int shift,const int nrate);
    public:
        CTimeSeries(void) {}
        CTimeSeries(double *arts,const int row,const int shift,const int nrate)
            {
            GetRatesItemValue(*arts,row,shift,nrate);
            }
 
        virtual ~CTimeSeries(void) {}
    };
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 04:00     Приведение типов
Посмотрите здесь:

C++ Приведение типов
Приведение типов. C++
C++ Приведение типов?
Приведение типов C++
Приведение типов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
13.09.2013, 04:35     Приведение типов #2
GetRatesItemValue(arts,row,shift,nrate);

Добавлено через 1 минуту
это раз

Добавлено через 1 минуту
а два у тебя типы разные сделай приведения
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 102
13.09.2013, 04:38  [ТС]     Приведение типов #3
Цитата Сообщение от Winorun Посмотреть сообщение
GetRatesItemValue(arts,row,shift,nrate);

Добавлено через 1 минуту
это раз

Добавлено через 1 минуту
а два у тебя типы разные сделай приведения
Да, опечатка, разыменовывание указателя я уже сделал.
А вот как сделать приведения типов не знаю, поэтому и написал.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
13.09.2013, 04:39     Приведение типов #4
Если так:
C++
1
2
3
4
CTimeSeries(double *arts,const int row,const int shift,const int nrate)
{
    GetRatesItemValue((const ContentTimeSeries*)arts, row, shift, nrate);
}
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
13.09.2013, 04:42     Приведение типов #5
конструкор копировония и или чтонить подобное к томуже структура это не масив double

Добавлено через 1 минуту
http://www.amse.ru/courses/cpp2/2011_04_25.html по теме млжешь почитать

Добавлено через 1 минуту
как вариант сделай функцию возврата указателя на первый double
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 102
13.09.2013, 07:11  [ТС]     Приведение типов #6
Цитата Сообщение от Winorun Посмотреть сообщение
конструкор копировония и или чтонить подобное к томуже структура это не масив double

Добавлено через 1 минуту
http://www.amse.ru/courses/cpp2/2011_04_25.html по теме млжешь почитать

Добавлено через 1 минуту
как вариант сделай функцию возврата указателя на первый double
Точно, вот это самое то reinterpret_cast. Пусть чуть побольше кода чем в Си варианте, но зато безопаснее...

Добавлено через 1 час 47 минут
В общем сделал вот так:
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
#pragma once
 
class CTimeSeries
    {
    protected:
        int new_size;
        #pragma pack (push, 1)
        struct ContentTimeSeries
            {
            unsigned int      ctm;
            double            open;
            double            low;
            double            high;
            double            close;
            double            vol;
            };
        #pragma pack (pop)
        double GetRatesItemValue(const ContentTimeSeries* rates,const int rates_total,const int shift,const int nrate);
    public:
        CTimeSeries(void) {}
        CTimeSeries(double *arts,const int row,const int shift,const int nrate)
            {
            GetRatesItemValue(reinterpret_cast<ContentTimeSeries*>(arts),row,shift,nrate);
            }
 
        virtual ~CTimeSeries(void) {}
    };

Winorun, думаю в функцию заключать лишние строки кода появятся, а результат тот же.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
13.09.2013, 07:51     Приведение типов #7
unsigned int ctm; не double поэтому и результат такой

Добавлено через 1 минуту
в структуре указатель на open возвращай тагда масив должен в памяти быть
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2013, 07:59     Приведение типов
Еще ссылки по теме:

Приведение типов C++
C++ Приведение типов
Приведение типов C++

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

Или воспользуйтесь поиском по форуму:
gomodril
 Аватар для gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 102
13.09.2013, 07:59  [ТС]     Приведение типов #8
Цитата Сообщение от Winorun Посмотреть сообщение
unsigned int ctm; не double поэтому и результат такой
Не понял про какой результат идет речь? Там то все как раз нормально, это ведь структура, к тому же в реализации структуры присутствует приведение типов:
C++
1
2
3
4
5
6
7
8
9
10
11
    switch(nrate)
        {
    case 0: return double(rates[nitem].ctm);
    case 1: return rates[nitem].open;
    case 2: return rates[nitem].low;
    case 3: return rates[nitem].high;
    case 4: return rates[nitem].close;
    case 5: return rates[nitem].vol;
        }
    return(0.0);
    }
Yandex
Объявления
13.09.2013, 07:59     Приведение типов
Ответ Создать тему
Опции темы

Текущее время: 22:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru