我有一些麻煩,使用包含用戶定義類型的數組。 一個簡單的代碼是這樣的:使用茱莉亞在陣列中的用戶定義類型的問題
struct MyType
a::Int64
b::Int64
end
MyArray = Array{MyType}(5)
MyArray[1].a = [1 2 3]
編譯器顯示錯誤信息 「UnderRefError:訪問未定義的參考」 這是問題,由於存在對的MyType沒有默認構造函數?
我有一些麻煩,使用包含用戶定義類型的數組。 一個簡單的代碼是這樣的:使用茱莉亞在陣列中的用戶定義類型的問題
struct MyType
a::Int64
b::Int64
end
MyArray = Array{MyType}(5)
MyArray[1].a = [1 2 3]
編譯器顯示錯誤信息 「UnderRefError:訪問未定義的參考」 這是問題,由於存在對的MyType沒有默認構造函數?
實際上,如果你沒有明確地定義一個默認內部構造函數,那麼Julia會自動定義一個默認的內部構造函數。這相當於:
julia> struct MyType
a::Int64
b::Int64
MyType(a,b) = new(a,b)
end
需要注意的是,通過運行MyArray = Array{MyType}(5)
,你只是構建5個元素的數組,其eltype
應該MyType
。茱莉亞仍然不知道這些參賽作品是什麼,這就是錯誤所抱怨的。 看看下面的例子:
julia> a = Array{Complex}(5)
5-element Array{Complex{T<:Real},1}:
#undef
#undef
#undef
#undef
#undef
順便說一句,我不知道你的意思是這條線MyArray[1].a = [1 2 3]
做什麼,因爲a
是類型Int
,不Vector{Int}
的。
你有因爲數組的第一個元素沒有定義寫類似
MyArray[1] = MyType(4, 5)
此行沒有任何意義
MyArray[1].a = [1 2 3]
。 MyArray[1].a
表示您試圖訪問未定義對象的a
成員。這是行不通的。
如果你想創建一個初始化的MyType對象的5元素數組,你可以這樣做。
fill(MyType(0, 0), 10)