将变量设置为列表中的下一个实例不起作用

Posted

技术标签:

【中文标题】将变量设置为列表中的下一个实例不起作用【英文标题】:Setting variable to the next instance in the list does not work 【发布时间】:2017-07-10 22:29:17 【问题描述】:

上下文:我正在编写 Dijkstra 的最短路径算法,只是为了练习我在有关 excel-vba 的教程中阅读的基本模式。

我遇到了问题。经过长时间调试,我发现了问题。

这是一个显示问题的缩小版本(已评论):

Option Explicit

Private Sub btnSolution_Click()
    Dim N As Integer: N = 3

    'Creating one list with the first cell as head
    Dim list As New model_linked_list
    Set list.next_cell = Nothing

    'Creates list 1..N
    Dim i As Integer: i = N
    Do While i > 0
        'Creates the next cell adding to the start (after the head-cell)
        Dim cell As New model_linked_list
        cell.city = i
        Set cell.next_cell = list.next_cell

        'Update head-cell
        Set list.next_cell = cell
        i = i - 1
    Loop

    'All good till here, but when I try to loop over the list:

    Dim item As model_linked_list
    Set item = list.next_cell

    'You will to set a breakpoint in this line to avoid infinite loop
    Do While Not item Is Nothing

        MsgBox item.city 'Always shows "1"

        'This is the problematic line
        Set item = item.next_cell 'It seems like it does nothing, literally
    Loop

End Sub

我的model_linked_list 只是:

Option Explicit

Public city As Integer
Public next_cell As model_linked_list

说明,上面的代码应该只创建一个这样的列表:

当我尝试转到列表中的下一个单元格时,Set 似乎不起作用。有没有人见过这个?如何解决?

提前致谢。

【问题讨论】:

您应该在每次循环第一个循环时创建CellNew 副本,因此Set Cell = New model_linked_list。目前,您只是在更新一个实例。 (请记住,Dim 语句仅在子例程的开头完成,无论它们位于代码中的什么位置。) VBA: Difference in two ways of declaring a new object? (Trying to understand why my solution works)的可能重复 【参考方案1】:

你的错误在这里:

Dim cell As New model_linked_list

改成:

Dim cell As model_linked_list
Set cell = New model_linked_list

简而言之,对于Dim cell As New model_linked_list"New" 运算符只执行一次,因此您在所有迭代中都在操作同一个对象。

【讨论】:

我的评论比你的回答快了大约 20 秒(但我不必让我的评论看起来很漂亮):D @YowE3K Dóh,你为什么讨厌写答案? :D 事实上,我正在考虑只写一个更正,但后来认为值得添加一些解释。我觉得 OP 来自一些 C++ 背景。 因为我有一种模糊的感觉,即该问题无论如何都会被标记为重复 - 我知道有很多次我看到人们被告知不要使用 Dim x As New y 结构。 (如果我能记住其中一个案例,我会自己将其标记为重复!:D P.S. 我刚刚搜索了site:***.com excel-vba dim as new 并找到了合适的副本。) 谢谢你们...我学到了一些新东西,我的代码现在运行良好:) 我实际上赞成这个问题,即使它是一个重复 - 它确实为搜索这个问题的人提供了一个很好的着陆点。

以上是关于将变量设置为列表中的下一个实例不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Swift:将 Facebook JSON 中的名称、照片和封面设置为变量不起作用。

如果拆分列表上的语句不起作用python3

$_GET 变量在我的 ec2 实例中使用 cloudfront aws 不起作用

如果全局不起作用,在Python中访问for循环之外的变量?

Has_many:通过 Rails 4 实例变量不起作用

通过更改 SwiftUI 中的 @State 变量来刷新视图不起作用