146 / 143 / 32
Регистрация: 21.01.2012
Сообщений: 545
1

Побороть ошибку "Значение параметра по умолчанию для "rec" должно быть константой времени компиляции"

17.05.2012, 09:36. Показов 8651. Ответов 2
Метки нет (Все метки)

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
public class Deal
    {
        int iD; //ИДи
 
        public int ID
        {
            get { return iD; }
            set { iD = value; }
        }
        DateTime date; //Дата
 
        public DateTime Date
        {
            get { return date; }
            set { date = value; }
        }
        byte type; // 0 - сделка 
 
        public byte Type
        {
            get { return type; }
            set { type = value; }
        }
        Money received; // Сколько бабла получено
 
        public Money Received
        {
            get { return received; }
            set { received = value; }
        }
        Money used; //Сколько бабла потрачено
 
        public Money Used
        {
            get { return used; }
            set { used = value; }
        }
        string comment; //Куда же без комментов
 
        public string Comment
        {
            get { return comment; }
            set { comment = value; }
        }
 
        //конструктор
        Deal(DateTime date, byte type, Money rec = new Money(0,0), Money used = new Money(0,0), string comment = "")
        {
            this.iD = GetId();
            this.date = date;
            this.type = type;
            this.received = rec;
            this.used = used;
            this.comment = comment;
        }
 
        private int GetId()
        {
            return 0;
        }
    }
 
    //Бабло
    struct Money
    {
        public int Rub;
        public short Kop;
        public Money(int Rub, short Kop)
        {
            this.Rub = Rub;
            this.Kop = Kop;
        }
        
        public override string ToString()
        {
            return String.Format("{0}руб. {1}коп",Rub,Kop);
        }
        
        //из бабла во флоат НЕЯВНО
        public static implicit operator float(Money value)
        {
            return value.Rub + (value.Kop / 100.0f);
        }
 
        //из флоата в бабло ЯВНО
        public static explicit operator Money(float value)
        {
            checked
            {
                int rub = (int)value;
                short kop = Convert.ToInt16((value - rub) * 100);
                return new Money(rub, kop);
            }
        }
    }
Ошибка 1 Значение параметра по умолчанию для "rec" должно быть константой времени компиляции D:\csharp\Buhgaltery\Buhgaltery\MainForm.cs 70 52 Buhgaltery
Ошибка 2 Значение параметра по умолчанию для "used" должно быть константой времени компиляции D:\csharp\Buhgaltery\Buhgaltery\MainForm.cs 70 81 Buhgaltery

Добавлено через 22 минуты
С помощью приведения из флоата тоже не получается задать параметры по умолчанию
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.05.2012, 09:36
Ответы с готовыми решениями:

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно"
В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло",...

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...

Получить значение из {"text1":"val1","text2":"val2","text3":{"text":"val"}}
Есть такая строка var my = '{"text1":"val1","text2":"val2","text3":{"text":"val"}}'; Как из...

Выдает ошибку "Значение должно быть вектором."
Помогите, пожалуйста. Может дело в синтаксисе? Это интерполирование Лагранжа. В результате...

2
965 / 768 / 171
Регистрация: 12.04.2009
Сообщений: 1,700
17.05.2012, 10:46 2
C#
1
Deal(DateTime date, byte type, Money rec = new Money(0,0), Money used = new Money(0,0), string comment = "")
так нельзя
C#
1
Money rec = new Money(0,0), Money used = new Money(0,0)
можно использовать только те типы, которые сразу являются значениями, а не возвращают значения.
к примеру
C#
1
ctor(string prametr = "")
- правильно
C#
1
ctor(string prametr = string.Empty)
- не правильно
1
Эксперт Java
4077 / 3811 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 11
17.05.2012, 11:19 3
Придется перегружать конструктор, если хотите использовать неконстантные выражения в defualt парметрах.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        Deal(DateTime date, byte type, Money rec, Money used, string comment = "")
        {
            this.iD = GetId();
            this.date = date;
            this.type = type;
            this.received = rec;
            this.used = used;
            this.comment = comment;
        }
        Deal(DateTime date, byte type) : this(date, typ, new Money(0,0), new Money(0,0))
        {
        }
        Deal(DateTime date, byte type, Money rec) : this(date, typ, rec, new Money(0,0))
        {
        }
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2012, 11:19

Как сделать чтобы через запрос заполнялись характеристики поля: "значение по умолчанию", "формат rtf", "описание"?
SQL запрос создаёт таблицу. create table Группы (КодГруппы COUNTER CONSTRAINT PrimaryKey...

Значение полей по умолчанию : "нет значения поля по умолчанию"; "Null";"0"
Форумчане, доброго времени суток! Подскажите. пожалуйста, как правильно указывать значение поля по...

При использовании функции root в блоке программирования выдает ошибку "значение должно быть матрицей"
При программировании 3-мерных массивов (2-х мерное распределение температур с изменением во...

Выдает ошибку "Выражение должно быть допустимым для изменения левосторонним значениям "
List<Animals> List<Animals>::operator+(Animals object) { List<Animals> *Add = new List<Animals>;...

Исправить ошибку "выражение должно быть допустимым для изменения левосторонним значением"
проблема когда задаю функцию, пишет " +6 перегрузок выражение должно быть допустимым для изменения...

Исправить ошибку "выражение должно быть допустимым для изменения левосторонним значением"
#include <iostream> const int N = 10; class mc { public: char s1, s2; void input();...


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

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

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