Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: function call on left-hand side of assignment must Добавлено: 24.05.07 11:12  

Автор вопроса:  -АлександР- | Web-сайт: sham.clan.su
function call on left-hand side of assignment must be return Variant or Object

так выглдит полный текст ошибки

...

'àíàëîã submatrix (A, ir, jr, ic, jc) â MathCAD
Public Function SubMatrix _
( _
                        A() As Single, _
                        ir As Integer, _
                        jr As Integer, _
                        ic As Integer, _
                        jc As Integer _
) As Single()
    
    ReDim SubMatrix(jr - ir, jc - ic)
    
    Dim i As Integer, j As Integer
    
    For i = 1 To jr - ir
        For j = 1 To jr - ir
                   
               SubMatrix(i, j) = A(ir + i, jr + j)
                   
        Next j
    Next i
    
End Function
так выглядит функция, ругается на строчке SubMatrix(i, j) = A(ir + i, jr + j)

вопрос: чео ему не нравится-то?

вроде ж все функции слева от знака присвоения присваиваются..

или я с массивами не умею работать?

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #1 Добавлено: 24.05.07 11:39
Single() замени на Variant и будет тебе счастье.
Массив функцией на VB вернуть твоим способом невозможно. Это уже обсуждалось.

Вот так, может и криво, но работает
Option Explicit

Private Sub Form_Load()
Dim arMatrix() As Single
Dim arMatrix2() As Variant
    arMatrix2 = SubMatrix(arMatrix, 10, 10, 10, 10)
End Sub

Public Function SubMatrix _
( _
                        A() As Single, _
                        ir As Integer, _
                        jr As Integer, _
                        ic As Integer, _
                        jc As Integer _
) As Variant
     
    Dim arSubMatrix
    ReDim arSubMatrix(jr - ir, jc - ic)
     
    Dim i As Integer, j As Integer
     
    For i = 1 To jr - ir
        For j = 1 To jr - ir
                    
               arSubMatrix(i, j) = A(ir + i, jr + j)
                    
        Next j
    Next i
    SubMatrix = arSubMatrix
End Function

Ответить

Номер ответа: 2
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #2
Добавлено: 24.05.07 13:51
Скорее всего, ему не нравится, что у тебя массив и функция названы одинаково. Он думает, что SubMatrix(i, j) - вызов функции и выдает, что вызов функции function call с левой стороны выражения присваивания on left-hand side of assignment должен must чего-то там.

Ответить

Номер ответа: 3
Автор ответа:
 ZagZag



ICQ: 295002202 

Вопросов: 87
Ответов: 1684
 Профиль | | #3 Добавлено: 24.05.07 14:47
Sharp, у него не функция и массив названы одинаково. У него функция должна массив возвращать.
-Александр-, а не проще объявить массив как глобальный и функцию переделать в процедуру (которая ничего не возвращает)?

Ответить

Номер ответа: 4
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #4
Добавлено: 24.05.07 18:13
ZagZag
Спасибо, ZagZag , но

а не проще объявить массив как глобальный и функцию переделать в процедуру (которая ничего не возвращает)?
да криво это получится как-то

Массив функцией на VB вернуть твоим способом невозможно. Это уже обсуждалось.
почему?

все же получилось, надо было просто не обращаться к функции как к массиву

вобщем гляди:
Public Function SubMatrix _
( _
                        A() As Single, _
                        ir As Integer, _
                        jr As Integer, _
                        ic As Integer, _
                        jc As Integer _
) As Single()
    
    Dim iSubMatrix() As Single
    ReDim iSubMatrix(jr - ir + 1, jc - ic + 1) As Single
    
    Dim i As Integer, j As Integer
    
    For i = 1 To jr - ir + 1
        For j = 1 To jc - ic + 1
                   
               iSubMatrix(i, j) = A((jr - ir - 1) + i, (jc - ic - 1) + j)
                   
        Next j
    Next i
    
    SubMatrix = iSubMatrix
    
End Function
работает

Ответить

Номер ответа: 5
Автор ответа:
 -АлександР-



Вопросов: 55
Ответов: 1008
 Web-сайт: sham.clan.su
 Профиль | | #5
Добавлено: 24.05.07 18:16

Sharp
Скорее всего, ему не нравится, что у тебя массив и функция названы одинаково. Он думает, что SubMatrix(i, j) - вызов функции и выдает, что вызов функции function call с левой стороны выражения присваивания on left-hand side of assignment должен must чего-то там
здесь это функция

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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам