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

Шаблон - C++

Восстановить пароль Регистрация
 
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
27.07.2013, 11:21     Шаблон #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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
//header
#include <iostream>
#include <string>   
#include <valarray>
using namespace std;
template <class T1, class T2>
class Pair
{
private:
    T1 a;
    T2 b;
public:
    Pair(const T1 & aval, const T2 & bval);
    //Pair(int n);
    void SetPair(int n);
    Pair() {}
    void Show();
    int Sum();
    ~Pair() {}
};
class Wine
{
public:
    typedef std::valarray<int> ArrayInt;
    typedef Pair<ArrayInt, ArrayInt> PairArray;
private:
    std::string label;
    int years;
    PairArray Pairr;
public:
    void GetBottles();
    int Sum();
    string & Label();
    void Show();
    Wine(const char * l, int y, const int yr[],const int bot[]);
    //Wine(const char * l, int y);
    ~Wine () {}
};
template <class T1, class T2>
void Pair<T1,T2>::SetPair(int n)
{
    for(int i=0;i<n;i++)
    {
        cout<<"Enter year: "<<a[i]<<endl;
        cout<<"Enter bottles for that year: "<<b[i]<<endl;
    }
}
 
void Wine::GetBottles()
{
    cout<<"Enter name of wine: "<<endl;
    getline(cin,label);
    cout<<"Enter number of years: "<<years<<endl;
    cin>>years;
    cin.get();
    cout<<"Enter "<<label<<" data for "<<years<<"year(s):\n";
    Pairr.SetPair(years);
}
 
 
 
template <class T1, class T2>
Pair<T1,T2>::Pair(const T1 & aval, const T2 & bval)
{
    for(int i=0;i<(sizeof(aval)/4);i++)
    {
        a[i]=aval[i];
        b[i]=bval[i];
    }
}
template <class T1, class T2>
void Pair<T1,T2>::Show()
{
cout<<"Year  Bottles\n";
for(int i=0;i<(sizeof(a)/4);i++)
{
    cout<<a[i]<<"  "<<b[i]<<endl;
}
}
template <class T1, class T2>
int Pair<T1,T2>::Sum()
{
    int c=0;
    for(int i=0;i<(sizeof(a)/4);i++)
        c+=b[i];
    return c;
}
 
int Wine::Sum()
{
    return Pairr.Sum();
}
 
string & Wine::Label()
{
return label;
}
 
void Wine::Show()
{
    cout<<"Wine: "<<Label()<<endl;
    Pairr.Show();
}
Wine::Wine(const char * l, int y, const int yr[],const int bot[]):  Pairr(yr,bot)
{
    label=l;
    years=y;
    }
/*Wine::Wine(const char * l, int y)
{
    label=l;
    Pairr(y,y);
}*/
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "header.h"
using namespace std;
int main(void)
{
    int k[]={1,3,4};
    int v[]={2,3,4};
    Wine holding("lol",1,k,v);
    holding.GetBottles();
    holding.Show();
    const int yer=3;
    int y[yer]={1993, 1995, 1998};
    int b[yer]={48, 60, 72};
    Wine more("Gushing Grape Red",yer,y,b);
    more.Show();
    cout<<"Total bottles for"<<more.Label()<<": "<<more.Sum()<<endl;
    cout<<"Bye\n";
    system("PAUSE");
    return 0;
}
ругается на 104 строчку, что не может преобразовать из const int [] в const Wine::ArrayInt &.
Почему?/
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2013, 11:21     Шаблон
Посмотрите здесь:

C++ Шаблон
C++ Шаблон
C++ шаблон
Шаблон C++
Шаблон класса C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rrrFer
Заблокирован
27.07.2013, 11:34     Шаблон #2
шаблон тут ИМХО непричем.
Ты пытаешься использовать const int [] как valarray<int>, но у valarray нет такого конструктора (неявного приведения типов не будет). Смотри вот сюда: http://www.cplusplus.com/reference/v...rray/valarray/

Не по теме:

кстати, никогда не пользовался valarray. Наверняка полезная штука, раз в стандартной библиотеке, но МБ пояснишь зачем ты ее тут использовал?

Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
27.07.2013, 11:35     Шаблон #3
А почему Wine не имеет такого конструктора?
C++
1
Wine::Wine(const char * l, int y, std::valarray<int> yr,const int bot[]);
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
27.07.2013, 11:50  [ТС]     Шаблон #4
Kuzia domovenok, я бы написал так, но в задание объявление конструктора в таком виде:
Wine(const char * l, int y, const int yr[],const int bot[]);

Добавлено через 4 минуты
rrrFer, руководствовался заданием/
возможно, я его не так понял и все усложнил
rrrFer
Заблокирован
27.07.2013, 11:51     Шаблон #5
хз, там вобще говнокод ядерный
мне так этот момент:
C
1
2
3
4
5
for(int i=0;i<(sizeof(aval)/4);i++)
    {
        a[i]=aval[i];
        b[i]=bval[i];
    }
вобще не понятен. Почему делишь именно на 4, почему граница индекса зависит от aval, а индексы используются в bval. Ты присваиваешь значения a[i] и b[i], но размер a и b нигде не задаешь (они ведь valarray...)

Это я к тому, что если ты не хочешь выкинуть весь этот беспридел, добавь хотя бы
C
1
2
a.resize(sizeof(aval)/4);
  b.resize(sizeof(aval)/4);
(тока я не знаю почему там 4 и что ты там делишь, но как -то так).
underwaterspace
2 / 2 / 0
Регистрация: 29.01.2013
Сообщений: 47
27.07.2013, 12:08  [ТС]     Шаблон #6
rrrFer, туда не стоит смотреть, там чушь
меня больше волновало, что скажет компилятор
но все равно спасибо
Yandex
Объявления
27.07.2013, 12:08     Шаблон
Ответ Создать тему
Опции темы

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