Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
1

Ошибка при описании структуры (Объект this не может использоваться до присваивания значений)

25.08.2012, 23:34. Просмотров 2974. Ответов 10
Метки нет (Все метки)

Что-то я не понял чего это студии мой конструктор не нравится:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    struct CountInfo
    {
        public char symbol { get; private set; }
        public int count { get; private set; }
 
        public CountInfo(char _symbol, int _count)
        {
            symbol = _symbol;
            count = _count;
        }
 
        public override string ToString()
        {
            return String.Format("{0} {1}: {2}", symbol.ToString().ToUpper(), symbol.ToString().ToLower(), count);
        }
    }
Не нравится ей инициализация в конструкторе:
1)Объект this не может использоваться до присваивания значений всем его полям
2)Резервное поле для автоматически реализуемого свойства "ConsoleApplication.CountInfo.symbol" должно быть полностью назначено до возврата вызывающему объекту элемента управления. Попробуйте вызвать конструктор из инициализатора конструктора.

Что-то я не понял чего ему не нравиться? Вроде как хочет чтобы вызывался стандартый конструктор структур, но ведь раз я не указывал другого поведения то он и так должен вызываться. Чего не так-то?

Добавлено через 1 минуту
*Если сделать как класс то всё собирается, значит я что-то не знаю о работе с конструктором у структур, подскажите пожалуйста что именно я упустил.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2012, 23:34
Ответы с готовыми решениями:

Объект COM, который был отделен от своего базового RCW, использоваться не может
Здравствуйте. Пишу приложение WinForms и делаю такой запрос к БД Access: cmd.CommandType =...

Ошибка "В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, ..."
if (xn>b&xn<a) { const int N=8; int i=3; ...

Ошибка CS0201: "В качестве оператора могут использоваться только выражения присваивания, вызова, инкремента, ..."
Добрый день Знающие люди, помогите, пожалуйста, а то всю голову уже сломал. Компиляция кода ...

Ошибка в описании структуры
Я новичок. Не могу разобраться как нормально описать структуру(( компилятор пишет ошибку. на...

10
51 / 50 / 5
Регистрация: 14.08.2012
Сообщений: 248
26.08.2012, 00:56 2
Попробуйте сделать так:
C#
1
2
3
4
char symbol; 
int count;
public char Symbol { get; }
public int Count { get; }
0
632 / 493 / 77
Регистрация: 28.07.2010
Сообщений: 895
26.08.2012, 01:06 3
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Gepar Посмотреть сообщение
Что-то я не понял чего ему не нравиться?
сам когда-то долго с этим парился, а потом заглянул на МСДН:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    struct CountInfo
    {
        public char symbol { get; private set; }
        public int count { get; private set; }
 
        public CountInfo(char _symbol, int _count) : this()
        {
            symbol = _symbol;
            count = _count;
        }
 
        public override string ToString()
        {
            return String.Format("{0} {1}: {2}", symbol.ToString().ToUpper(), symbol.ToString().ToLower(), count);
        }
    }
5
Злой няш
1947 / 1382 / 508
Регистрация: 05.04.2010
Сообщений: 2,627
26.08.2012, 01:06 4
Gepar, вызов конструктора по умолчанию решит ребус:
C#
1
public CountInfo(char _symbol, int _count) : this()
2
Темная сторона .Net
589 / 486 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
26.08.2012, 02:17 5
Цитата Сообщение от Blood-Angel Посмотреть сообщение
вызов конструктора по умолчанию решит ребус
Нет.У меня все работало и без дефаултного конструктора.

Цитата Сообщение от Gepar Посмотреть сообщение
C#
1
2
public char symbol { get; private set; }
public int count { get; private set; }
мне кажется(я могу ошибаться),но нельзя делать поля наполовину открытыми.
придется описать либо полностью закрытый либо назначить какое-то дефоултное значение при set.

Ребята предлагают вызывать дефалт что б перед этим он проиницилизыровал поля структуры.

Цитата Сообщение от Gepar Посмотреть сообщение
Объект this не может
а тут на какую строчку жалуется?
0
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
26.08.2012, 02:19  [ТС] 6
Я почему-то считал что он и сам в данном случае вызывается ...

Добавлено через 1 минуту
Цитата Сообщение от Noob.net Посмотреть сообщение
мне кажется(я могу ошибаться),но нельзя делать поля наполовину открытыми.
Это только кажеться Нужно лишь чтобы само поле объявлялось как public и вполне можно потом делать set/ get с доступом private.
0
Master of Orion
Эксперт .NET
6077 / 4933 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.08.2012, 03:20 7
Noob.net, свойство это просто поле с методами GetПоле и SetПоле, у который может быть любой модификатор доступа
0
Темная сторона .Net
589 / 486 / 39
Регистрация: 21.07.2012
Сообщений: 1,668
26.08.2012, 03:28 8
ребята,я к тому,свойства в структурах не так как с классами работают.

Если бы вы не использовали автоматические свойства проблема бы решилась без вызова станд.конструктора,так как изначально появились непроинициализированные(страшное слово) переменные. Я к тому,что может и не надо закрывать поля?
1
Master of Orion
Эксперт .NET
6077 / 4933 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
26.08.2012, 03:39 9
Noob.net, свойства в структурах работают быстрее, чем поля, факт начиная с .Net 3.5
1
1184 / 540 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
27.08.2012, 11:39  [ТС] 10
Цитата Сообщение от Noob.net Посмотреть сообщение
Если бы вы не использовали автоматические свойства проблема бы решилась без вызова станд.конструктора
Проверил - и правда, если не использоваться автом. свойства то вызов конструктора по умолчанию не нужен.
0
Master of Orion
Эксперт .NET
6077 / 4933 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.08.2012, 14:57 11
Gepar, можно вместо автосвойства просто сделать классическое свойство {get поле;} а в конструкторе вызывать явно это самое поле

ну не знаю, для структур обычно всегда вызывают
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2012, 14:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

ОШИБКА - Эта функция здесь не может использоваться
Пытаюсь интегрировать систему из 4х ДУ, но ошибка не даёт построить таблицу результатов....

Использование вектора для присваивания значений элементам структуры
Здравствуйте, форумчане. Сразу отмечу, что я новичек, так что, возможно, мой вопрос покажется вам...

при вызове конструктора присваивания надо возвращать ссыль на объект или сам объект. Смысл? Значения нужных полей меняютмся и без этого!
Друзья! Обнаружил пробел в знаниях. Собсно, вопрос в теме. Дополню лишь: поля объекта меняются на...

Ошибка. Имя ресурса не может использоваться несколько раз
при компиляции программы в VS на языке vb.net в процессе сборки появляется ошибка: Имя ресурса...


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

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

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