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

VS ругается на ошибки - C++

Восстановить пароль Регистрация
 
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 13:53     VS ругается на ошибки #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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
// money 1.0.0.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "locale"
#include "iostream"
#include "string.h"
#include "windows.h"
#include "map"
 
using namespace std;
 
// --------------------------------------------------------------------------------
// Валюты необходимые для задачи
enum currencies
{
    KZT,
    RUR,
    USD,
    EUR
};
 
// --------------------------------------------------------------------------------
// Класс-деньги
class money
{
public:
    // Конструкторы
    money(double summa = 0.0, currencies currency = KZT);
    money(unsigned int int_part, unsigned char fract_part, currencies currency = KZT);
        // Тип валюты
    currencies getCurrency();
    //Ввод валюты
    currencies setCurrency();
    // Целая часть суммы
    unsigned int _int_part;
    // Дробная часть суммы (тиыны, копейки и т.д.)
    unsigned char _fract_part;
    // Тип валюты
   currencies _currency;
    unsigned long long smallChange() const;
};
 
// --------------------------------------------------------------------------------
// Класс-Обменник - наследование
class exchanger
{
public:
    // Меняет одну валюту на другую
    static money exchange(const money& summa, currencies currency);
    // Курсы обмена
    static map<currencies, double> rates;
};
 
// --------------------------------------------------------------------------------
// Инициализирует статический член обменного класса
typedef pair<currencies, double> rate_pair;
rate_pair rates_arr[4] = 
{
    rate_pair(KZT, 1.0), 
    rate_pair(RUR, 5.1), 
    rate_pair(USD, 147.5), 
    rate_pair(EUR, 184.7)
};
map<currencies, double> exchanger::rates(rates_arr, rates_arr + sizeof (rates_arr) / sizeof (rate_pair));
 
// --------------------------------------------------------------------------------
// Для вывода типа валюты используется следующие имена
typedef pair<currencies, wstring> currency_name_pair;
currency_name_pair currencies_names_arr[4] = 
{ 
    currency_name_pair(KZT, L"KZT"), 
    currency_name_pair(RUR, L"RUR"), 
    currency_name_pair(USD, L"USD"), 
    currency_name_pair(EUR, L"EUR")
};
map<currencies, wstring> currency_names(currencies_names_arr, currencies_names_arr + sizeof (currencies_names_arr) / sizeof (currency_name_pair));
 
// --------------------------------------------------------------------------------
//
int main()
{
    setlocale(LC_ALL, "Russian");
    cout<<" \n";
    system("pause");
}
 
money::money(double summa, currencies currency) throw (invalid_argument)
{
    if (summa < 0)
    {
        throw invalid_argument("Сумма не может быть отрицательной");
    }
    _int_part = static_cast<unsigned int> (summa);
    _fract_part = static_cast<unsigned char> ((summa - _int_part)*100);
    _currency = currency;
}
 
money::money(unsigned int int_part, unsigned char fract_part, currencies currency)
{
    if (fract_part > 99)
    {
        throw invalid_argument("Количество мелочи не может быть больше 99");
    }
    _int_part = int_part;
    _fract_part = fract_part;
    _currency = currency;
}
 
currencies money::getCurrency(currencies currency)
{
    return currency;
}
 
int money::setCurrency(currencies currency)
{
    _currency = currency;
}
 
inline unsigned long long money::smallChange() const
{
    return _int_part * 100ULL + _fract_part;
}
 
money exchanger::exchange(const money& summa, currencies currency)
{
    double rate = rates[summa._currency] / rates[currency];
    money result = summa*rate;
    result.currency = currency;
    return result;
}
указал все в классе, а он ругается такими ошибками:
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(89) : warning C4290: спецификация исключений C++ игнорируется, кроме случая, когда указывается, что функция не является __declspec(nothrow)
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(112) : error C2511: currencies money::getCurrency(currencies): перегруженная функция-член не найдена в 'money'
1> c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(27): см. объявление 'money'
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(117) : error C2511: int money::setCurrency(currencies): перегруженная функция-член не найдена в 'money'
1> c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(27): см. объявление 'money'
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(129) : error C2676: бинарный '*': 'const money' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(130) : error C2039: currency: не является членом "money"
1> c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(27): см. объявление 'money'
в чем мой косяк?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 13:53     VS ругается на ошибки
Посмотрите здесь:

C++ Ругается на sqrt
ругается на M_PI C++
C++ Ругается на If
Ругается на if (a>M_PI) C++
Ругается на vector C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 14:03     VS ругается на ошибки #2
у вас функции в классе объявлены без параметров:
C++
1
2
3
4
currencies getCurrency();
    //Ввод валюты
currencies setCurrency();
    // Целая часть суммы
а определяете вы их уже с параметами
C++
1
2
3
4
5
6
currencies money::getCurrency(currencies currency) 
{
}
int money::setCurrency(currencies currency)
{
}
Добавлено через 2 минуты
Цитата Сообщение от cheser Посмотреть сообщение
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(129) : error C2676: бинарный '*': 'const money' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
Цитата Сообщение от cheser Посмотреть сообщение
money result = summa*rate;
надо перегружать оператор умножения.
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 14:05  [ТС]     VS ругается на ошибки #3
то есть мне надо будет просто сделать так: указать в функциях параметры "currencies currency", а в методах их не указывать?

а "*" это ссылка как и "&"
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 14:05     VS ругается на ошибки #4
Цитата Сообщение от cheser Посмотреть сообщение
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(130) : error C2039: currency: не является членом "money"
Цитата Сообщение от cheser Посмотреть сообщение
result.currency = currency;
Здесь вы уже сами запутались в своих обозначениях) в классе у вас есть переменная с именем _currency
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 14:09  [ТС]     VS ругается на ошибки #5
Цитата Сообщение от antoha398 Посмотреть сообщение
Здесь вы уже сами запутались в своих обозначениях) в классе у вас есть переменная с именем _currency
C++
1
result.currency = _currency;
error C2065: _currency: необъявленный идентификатор
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 14:10     VS ругается на ошибки #6
Цитата Сообщение от cheser Посмотреть сообщение
то есть мне надо будет просто сделать так: указать в функциях параметры "currencies currency", а в методах их не указывать?
если у вас нет цели перегружать эту функцию то объявление должно совпадать с определением:
C++
1
2
3
4
5
6
7
8
// объявление в классе
setCurrency(currencies currency);
 
//определение этой функции
int money::setCurrency(currencies currency)
{
/* трололо */
}
ну максимум можно объявить без имени переменной
C++
1
setCurrency(currencies);
Добавлено через 1 минуту
Цитата Сообщение от cheser Посмотреть сообщение
result.currency = _currency;
C++
1
result._currency = currency;
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 14:20  [ТС]     VS ругается на ошибки #7
C++
1
2
3
4
5
6
7
8
9
currencies money::getCurrency(currencies currency)
{
    return currency;
}
 
currencies money::setCurrency(currencies currency)
{
    _currency = currency;
}
сделал так и в классе указал "currencies currency" не ругается)

а вот по теме:
C++
1
money result = summa*rate;
он жестко меня троллит замени "*" на "&" эффект тот же
1>c:\users\zufar\documents\visual studio 2008\projects\money 1.0.0\money 1.0.0\money 1.0.0.cpp(129) : error C2676: бинарный '&': 'const money' не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 14:26     VS ругается на ошибки #8
money result = summa*rate

он жестко меня троллит замени "*" на "&" эффект тот же
вы тут умножаете.. при чем тут операторы взятия адреса и разыменования?

вам в классе надо перегрузить оператор умножения operator*
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 14:28  [ТС]     VS ругается на ошибки #9
Цитата Сообщение от antoha398 Посмотреть сообщение
вы тут умножаете.. при чем тут операторы взятия адреса и разыменования?

вам в классе надо перегрузить оператор умножения operator*
уже гоню
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 14:36     VS ругается на ошибки #10
C++
1
2
3
4
currencies money::setCurrency(currencies currency)
{
    _currency = currency;
}
если вы этой функции только присваиваете значение, лучше ее сделать типом void

Добавлено через 7 минут
Цитата Сообщение от cheser Посмотреть сообщение
money result = summa*rate;
для этого напишите лучше отдельную фукцию-член класса.
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 14:59  [ТС]     VS ругается на ошибки #11
Цитата Сообщение от antoha398 Посмотреть сообщение
для этого напишите лучше отдельную фукцию-член класса.
спасибо с этим разберусь, а в плане ввода значения где лучше писать?
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
03.05.2012, 15:10     VS ругается на ошибки #12
Цитата Сообщение от cheser Посмотреть сообщение
а в плане ввода значения где лучше писать?
ввод каких значений?
инициализация переменных типа money, например?
C++
1
2
money rub;
cin >> rub
в этом случае надо перегружать оператор ввод >>
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 15:17     VS ругается на ошибки
Еще ссылки по теме:

C++ ругается на clrscr()
C++ Компилятор не ругается
Ругается на gets() C++

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

Или воспользуйтесь поиском по форуму:
cheser
 Аватар для cheser
0 / 0 / 0
Регистрация: 14.01.2010
Сообщений: 42
03.05.2012, 15:17  [ТС]     VS ругается на ошибки #13
Цитата Сообщение от antoha398 Посмотреть сообщение
ввод каких значений?
изначально же у меня в классе "money"
C++
1
2
money(double summa = 0.0, currencies currency = KZT);
money(unsigned int int_part, unsigned char fract_part, currencies currency = KZT);
буде вводить числовое значение к примеру 300.0 а он сразу должен его обработать как 300.0 KZT
KZT (тенге )
Yandex
Объявления
03.05.2012, 15:17     VS ругается на ошибки
Ответ Создать тему
Опции темы

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