Нужно вернуть произвольное значение из функции

Предыдущая тема Следующая тема Перейти вниз

Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Пт Янв 02, 2009 5:27 pm

Нужно вернуть произвольное значение из функции.
Посмотрите код. Должно вернуться сначала строка
"Hello, world"
а потом число
"666"

Но компилятор ругаеться
any.bas(10) error 25: Invalid data types in 'function test( a as ubyte ) as any'
any.bas(13) warning 4(1): Suspicious pointer assignment
any.bas(16) error 159: Invalid assignment/conversion in 'function = method2()'

Код:


function method1() as integer
function = 666
end function

function method2() as string
function = "hello!"
end function

function test( a as ubyte ) as any
select case a
case 1
function = method1()

case 2
function = method2()

end select
end function

print test(2)
print test(1)
sleep

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  tux в Пт Янв 02, 2009 5:40 pm

если не ошибаюсть, то any можно использовать только для указктелей, тка что лучше тут возвращать не само значение, а указатель на него (вот только нипонимаю как ты буш угадывать какой тип на выходе получается)
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Пт Янв 02, 2009 6:04 pm

Ну допустим с типом на выходе я разберусь. Хотя конечно синтаксис получиться не очень симпатичный. Но его всегда можно разукрасить макросами.

А вот с функциями

Разве так будет работать?
Код:

function = @method1()
function = @method2()

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  tux в Пт Янв 02, 2009 6:17 pm

я имею ввиду
function test( a as ubyte ) as any ptr
select case a
case 1
function = @method1()

case 2
function = @method2()

end select
end function
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Пт Янв 02, 2009 7:06 pm

Если я не ошибаюсь, то это уже возвращаеться указатель на функцию. А оно мне нафиг не нужно!
Помниться уже задавал подобный вопрос, но мы разрулили другим способом.

И так, как получить указатель на значение, которое возвращает функция?

Потому что моя прога возвращает мне очень интересный результат.
А на строчке её вообще вышебло.

Код:

function method1() as integer
function = 666
end function

function method2() as string
function = "hello!"
end function

function test( a as integer ) as any ptr
select case a
case 1
function = @method1()
case 2
function = @method2()
end select
end function

function TestAsString( i as integer ) as string
dim s as string ptr = test(i)
function = *s
end function

function TestAsInteger( i as integer ) as integer
dim s as integer ptr = test(i)
function = *s
end function



print TestAsInteger(1)
' print TestAsString( 2)
sleep

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Пт Янв 02, 2009 7:24 pm

Указатели на функцию? Это натолкнуло меня на мысль. Но я кажись не понял, как их делать.

Написал код, но компилер ругаеться
any.bas(10) error 63: Expected explicit result type in 'function test( a as integer ) as function'
any.bas(11) error 63: Expected explicit result type in 'dim r as function'
any.bas(16) warning 4(1): Suspicious pointer assignment
any.bas(22) error 63: Expected explicit result type, found '=' in 'dim f as function = test(i)'
any.bas(23) error 159: Invalid assignment/conversion in 'function = f()'
any.bas(27) error 63: Expected explicit result type, found '=' in 'dim f as function = test(i)'

Код:

function method1() as integer
function = 666
end function

function method2() as string
function = "hello!"
end function

function test( a as integer ) as function
dim r as function
select case a
case 1
r = @method1
case 2
r = @method2
end select
function = r
end function

function TestAsString( i as integer ) as string
dim f as function = test(i)
function = f()
end function

function TestAsInteger( i as integer ) as integer
dim f as function = test(i)
function = f()
end function



print TestAsInteger(1)
print TestAsString( 2)
sleep

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  tux в Пт Янв 02, 2009 7:27 pm

блин, точно, чет неподумал, тогда наверно придется использовать для каждой функции временную переменную или сразу возвращать указатель
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  tux в Пт Янв 02, 2009 7:33 pm

Код:
function test( a as integer ) as function
dim r as function
ну тогда надо делать чет подобное (в примере есть)
http://freebasic.ru/tux/wikka/KeyPgDylibsymbol
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Пт Янв 02, 2009 8:01 pm

Это ты не то смотришь. Вот
http://freebasic.ru/tux/wikka/ProPgProcedurePointers
Но у меня почему-то не работает.

А dylib... это чтобы динамически dll подгружать.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  tux в Пт Янв 02, 2009 8:20 pm

я имел ввиду строчку
Dim AddNumbers As Function ( ByVal operand1 As Integer, ByVal operand2 As Integer ) As Integer
как пример создания функции по ее указателю
avatar
tux

Сообщения : 365
Дата регистрации : 2008-04-06
Возраст : 29
Откуда : Сибирь

Посмотреть профиль http://tux.nsk.ru/

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Пт Янв 02, 2009 8:55 pm

Есть! Я это сделал!

Код:

function method1() as integer
function = 666
end function

function method2() as string
function = "hello!"
end function

function test( a as integer ) as any ptr
select case a
case 1
   function = @method1
case 2
   function = @method2
end select
end function

function TestAsString( i as integer ) as string
dim r as function() as string = test(i)
function = r()
end function

function TestAsInteger( i as integer ) as integer
dim r as function() as integer = test(i)
function = r()
end function



print TestAsInteger(1)
print TestAsString( 2)
sleep

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Gena в Вс Июл 05, 2009 8:39 am

У меня подобная ошибка и я не знаю как же её исправить:
Код:

Dim As PFNglCreateShaderPROC glCreateShader   
glCreateShader=wglGetProcAddress("glCreateShader")
Пишет варнинг: Suspicious pointer assignment

Gena

Сообщения : 182
Дата регистрации : 2008-11-05
Возраст : 23
Откуда : Москва

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Eric-S в Сб Июл 11, 2009 3:52 am

Это не ошибка, а предупреждение. Типа: "будь внимателен ты мог запутаться с указателем".
Попробуй помудрить с приведением к определённому типу с помощью cast.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: Нужно вернуть произвольное значение из функции

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу

- Похожие темы

 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения