2016-07-18 77 views
1

我有一些麻煩,使用包含用戶定義類型的數組。 一個簡單的代碼是這樣的:使用茱莉亞在陣列中的用戶定義類型的問題

struct MyType 
a::Int64 
b::Int64 
end 

MyArray = Array{MyType}(5) 
MyArray[1].a = [1 2 3] 

編譯器顯示錯誤信息 「UnderRefError:訪問未定義的參考」 這是問題,由於存在對的MyType沒有默認構造函數?

回答

4

實際上,如果你沒有明確地定義一個默認內部構造函數,那麼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}的。

2

你有因爲數組的第一個元素沒有定義寫類似

MyArray[1] = MyType(4, 5) 

此行沒有任何意義

MyArray[1].a = [1 2 3] 

MyArray[1].a表示您試圖訪問未定義對象的a成員。這是行不通的。

如果你想創建一個初始化的MyType對象的5元素數組,你可以這樣做。

fill(MyType(0, 0), 10)