Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2013, 01:17   #1
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию Ошибка при работе с указателями в C#

Здравствуйте, столкнулся со следующей проблемой:
Есть код
Код:
class SomeClass
{
....
....
...
...
// ERROR HERE
private StudentInfo* studentInfo; // Cannot take the address of, get the size of, or declare a pointer to a managed type
};
StudentInfo:
Код:
public class StudentInfo
    {
        public StudentInfo(string _institutionName, int _completeAmount, int _visitedAmount)
        {
            InstitutionName = _institutionName;
            CompleteAmount = _completeAmount;
            VisitedAmount = _visitedAmount;
            try
            {
                VisitedPercent = 100F * ((float)CompleteAmount / VisitedAmount);
            }
            catch (DivideByZeroException)
            {
                Console.WriteLine("Attempt to devide by zero, VisitedPercent is set to 0");
                VisitedPercent = 0F;
            }
        }

        // trivial accessors
        public string InstitutionName { get; private set; }
        public int CompleteAmount { get; private set; }
        public int VisitedAmount { get; private set; }
        public float VisitedPercent { get; private set; }
    }
Собственно, пытаясь найти причину ошибки, я узнал, что дело, видимо, в механизме сборки мусора...

А вот в чем именно?
Igor95 вне форума Ответить с цитированием
Старый 05.11.2013, 01:32   #2
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

А зачем вы используете указатель, если не секрет?

----
Ладно, раз не отвечаете, то скажу сразу и спать пойду)

1) Указатель может указывать на структуру (struct) или на неуправляемый тип. В вашем случае указатель на класс (StudentInfo) объявить нельзя
2) Если вы-таки решите сделать StudentInfo структурой вместо класса, то вас ожидает еще один сюрприз: указатель на структуру не может быть объявлен, если структура содержит в себе ссылочное поле. А string (InstitutionName), как известно, ссылочный тип => опять ничего не получится.
3) В 99,9% случаев в шарпе указатели не нужны, поэтому и интересно, какую задачу вы собирались решать с его помощью
Благодарить в репутацию. Проклинать — туда же

Последний раз редактировалось Luuzuk; 05.11.2013 в 01:53.
Luuzuk вне форума Ответить с цитированием
Старый 05.11.2013, 02:28   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Спасибо за ответ, но все же почему:
Цитата:
указатель на структуру не может быть объявлен, если структура содержит в себе ссылочное поле
?

P.S:
При реализации хэш таблицы, поэкспериментировать с указателями вместо ссылок решил
Igor95 вне форума Ответить с цитированием
Старый 05.11.2013, 08:08   #4
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

Всё потому, что сборщик мусора может уничтожить объект, на который ссылается это поле, как недостижимый, т.к. не сможет отслеживать его "достижимость" по указателю.
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 05.11.2013, 15:19   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

А, все теперь ясно стало. Спасибо огромное
Igor95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при работе с памятью Joose Общие вопросы C/C++ 6 04.07.2013 14:54
Ошибка при работе с векторами T@Rak0t Общие вопросы C/C++ 4 07.04.2013 13:56
ошибка при работе с указателем Vladss Общие вопросы C/C++ 22 29.07.2009 03:58
Ошибка при работе с потоками vitalik007 Общие вопросы Delphi 6 09.03.2008 09:25
Ошибка при работе с БД malevich БД в Delphi 8 25.11.2007 15:10