Помощь - Поиск - Пользователи - Календарь
Полная версия: Pointer
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Артемий
Пишу ерундовый класс в MVS для работы с координатами.Возникла ошибка,причину которой я не могу понять.Вот класс:
        public class Pointer
        {
           public int x, y;

            public int this [int i]
            {
                get {<-----Вот здесь ошибка}
                {
                    switch (i)
                    {
                        case 0:
                            return x;
                        case 1:
                            return y;
                    }
                } 
                set
                {
                    switch (i)
                    {
                        case 0:
                            x = value;
                            break;
                        case 1:
                            y = value;
                            break;
                    }
                }
            }

            public Pointer(int x, int y)
            {
                this.x = x;
                this.y = y;
            }

            public Pointer(Pointer rhs)
            {
                this.x = rhs.x;
                this.y = rhs.y;
            }

            public static Pointer operator + (Pointer lhs, Pointer rhs)
            {
                Pointer Result = new Pointer(lhs);
                Result.x += rhs.x;
                Result.y += rhs.y;
                return Result;
            } 
            
        } 

Сама ошибка:
Цитата
Error 1 'Consoled.Program.Pointer.this[int].get': not all code paths return a value D:\d&s\Artem28\Рабочий стол\C++\Console\Console\Program.cs 15 17 Consoled

Как исправить?
klem4
что-то мне подсказывает что он пытается тебе сообщить о том, что возможны варианты при которых нечего будет вернуть при вызове get, попробуй в свитч добавить что-нибудь в дефолт.
Артемий
Я кстати это пробовал сразу,не помогло..что как-то странно..
volvo
А вот так:
  get
  {
    switch (i)
    {
      case 0:
        return x;
    }
    return y;
  }

?

Смысл - так же как и в C++, в любой точке выхода из функции должен быть return...
Артемий
Точняк! Респект Volvo. +1 обоим за то что обратили внимание.. blum.gif
Артемий
Я опять с проблемой - связался с IEnumerator:
(как сделать согласование между public и private ну или сто-то вроде того)
        public class Pointer : IEnumerable<Pointer>
        {
            private class PointerEnumerator : IEnumerator<PointerEnumerator>
            {
                Pointer myPointer;
                int count;

                public PointerEnumerator(Pointer myPointer)
                {
                    this.myPointer = myPointer;
                    count = -1;
                }

                public bool MoveNext()
                {
                    ++count;
                    return (count > 1) ? false : true;
                }

                public object Current
                {
                    get
                    {
                        if (count < 0 || count > 1)
                            writeln("Проблема с перечислителем!");
                        return myPointer[count];
                    }
                }

                public void Reset()
                {
                    count = -1;
                }
            }

           public int x, y;

            public IEnumerator<PointerEnumerator> GetEnumerator() //<=---Тут ошибка.Видать что-то с private и public
            {
                return new PointerEnumerator(this);
            }

            public int this [int i]
            {
                get
                {
                    switch (i)
                    {
                        case 0:
                            return x;
                    }
                    return y;
                } 
                set
                {
                    switch (i)
                    {
                        case 0:
                            x = value;
                            break;
                        case 1:
                            y = value;
                            break;
                    }
                }
            }

            public Pointer(int x, int y)
            {
                this.x = x;
                this.y = y;
            }

            public Pointer(Pointer rhs)
            {
                this.x = rhs.x;
                this.y = rhs.y;
            }

            public static Pointer operator + (Pointer lhs, Pointer rhs)
            {
                Pointer Result = new Pointer(lhs);
                Result.x += rhs.x;
                Result.y += rhs.y;
                return Result;
            } 
            
        } 
hardcase
Цитата(Артемий @ 2.12.2007 19:45) *
Я опять с проблемой - связался с IEnumerator:
(как сделать согласование между public и private ну или сто-то вроде того)
Цитата
public class Pointer : IEnumerable<Pointer>
{
private class PointerEnumerator : IEnumerator<Pointer>
{

.....


Кроме того, пользуйся услугами среды: правой клавишей на имени класса в объявлении -> Refactoring -> Implement Interface ... Explicitly.
Это позволит избежать глупостей при прописывании методов интерфейса.
Артемий
Про глупости эт ты прям в яблочко! smile.gif Спасиб за совет!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.