IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

 
 Ответить  Открыть новую тему 
> Pointer, C#
Артемий
сообщение 30.11.2007 21:01
Сообщение #1


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Пишу ерундовый класс в 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

Как исправить?


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 30.11.2007 21:11
Сообщение #2


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


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


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 30.11.2007 21:12
Сообщение #3


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Я кстати это пробовал сразу,не помогло..что как-то странно..


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 30.11.2007 21:20
Сообщение #4


Гость






А вот так:
  get
{
switch (i)
{
case 0:
return x;
}
return y;
}

?

Смысл - так же как и в C++, в любой точке выхода из функции должен быть return...

Сообщение отредактировано: volvo - 30.11.2007 21:22
 К началу страницы 
+ Ответить 
Артемий
сообщение 30.11.2007 21:25
Сообщение #5


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Точняк! Респект Volvo. +1 обоим за то что обратили внимание.. blum.gif


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 2.12.2007 19:45
Сообщение #6


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Я опять с проблемой - связался с 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;
}

}


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
hardcase
сообщение 2.12.2007 20:39
Сообщение #7


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


Цитата(Артемий @ 2.12.2007 19:45) *
Я опять с проблемой - связался с IEnumerator:
(как сделать согласование между public и private ну или сто-то вроде того)
Цитата
public class Pointer : IEnumerable<Pointer>
{
private class PointerEnumerator : IEnumerator<Pointer>
{

.....


Кроме того, пользуйся услугами среды: правой клавишей на имени класса в объявлении -> Refactoring -> Implement Interface ... Explicitly.
Это позволит избежать глупостей при прописывании методов интерфейса.

Сообщение отредактировано: hardcase - 2.12.2007 20:43


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Артемий
сообщение 3.12.2007 21:40
Сообщение #8


Помощник капитана
****

Группа: Пользователи
Сообщений: 601
Пол: Мужской
Реальное имя: Артем

Репутация: -  2  +


Про глупости эт ты прям в яблочко! smile.gif Спасиб за совет!


--------------------
Dum spiro spero!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.04.2024 8:24
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"