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

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

Войти
Регистрация
Восстановить пароль
 
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 132
#1

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

13.09.2013, 04:00. Просмотров 369. Ответов 7
Метки нет (Все метки)

Необходимо привязать адрес массива 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) {}
    };
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 04:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Приведение типов (C++):

приведение типов - C++
Объясните, пожалуйста, почему возникает такая ошибка: error C2666: 'operator *' : 4 overloads have similar conversions ? Из-за того,...

Приведение типов - C++
Есть код вызова метода: obj.func(char a, char b) сам метод: void func(char a, char b) { int i = (int)a, int j = (int)b; В...

Приведение типов - C++
Есть ли какая-нибудь разница в следующих выражениях: float a = 123.4f и float a = (float)123.4

Приведение типов - C++
Как привести наследника ко второму родителю? class Parent1 { public: int a; int b; int c; }; class Parent2

Приведение типов - C++
Уважаемые программеры, ПОМОГИТЕ!!! Нужно (мне) реализовать шаблонную функцию для приведения типов. Пример: newType_cast<T>(“123”); ...

Приведение типов - C++
Доброго времени суток. Данный кусок кода выделяет целую часть. Потом, вычитая из исходного числа целую часть, получаем дробную. Почему...

7
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
13.09.2013, 04:35 #2
GetRatesItemValue(arts,row,shift,nrate);

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

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

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

Добавлено через 1 минуту
а два у тебя типы разные сделай приведения
Да, опечатка, разыменовывание указателя я уже сделал.
А вот как сделать приведения типов не знаю, поэтому и написал.
0
alsav22
5426 / 4821 / 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);
}
1
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
1
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 132
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, думаю в функцию заключать лишние строки кода появятся, а результат тот же.
0
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
13.09.2013, 07:51 #7
unsigned int ctm; не double поэтому и результат такой

Добавлено через 1 минуту
в структуре указатель на open возвращай тагда масив должен в памяти быть
0
gomodril
6 / 6 / 0
Регистрация: 10.10.2012
Сообщений: 132
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);
    }
0
13.09.2013, 07:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2013, 07:59
Привет! Вот еще темы с ответами:

Приведение типов - C++
Есть задача создать список с объектами у которых разные классы, но один базовый предок. Потом нужно перебрать список и если объект одного...

Приведение типов - C++
При вводе с клавиатуры s = 11 и a = 1.1, получаем 9. Результат переменной d = 10, это правильно. В чём подвох? int main() { ...

Приведение типов - C++
Как компилятор заставить адекватней приводить типы? (VS2012) Например: int a=-1; unsigned int b=5; if(a&gt;b){...}//Условие...

Приведение типов - C++
Доброго времени суток. Есть вопрос. Допустим: class Base { ..... } class Derived:public Base{ .... }


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

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

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