2016-07-18 20 views
1

ユーザー定義型を含む配列を使用するといくつかの問題があります。 簡単なコードは次のようになります:juliaを使用した配列のユーザー定義型の問題

struct MyType 
a::Int64 
b::Int64 
end 

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

コンパイラはエラーメッセージ 「UnderRefError:未定義の参照へのアクセス」を示し のがMyTypeにはデフォルトコンストラクタがない起因する問題がこのですか?

答えて

4

実際、Juliaが明示的に定義していない場合は、常にデフォルトの内部コンストラクタが自動的に定義されます。 、MyArray = Array{MyType}(5)を実行して、あなただけのeltypeMyTypeをする必要があります5要素の配列を構築

julia> struct MyType 
     a::Int64 
     b::Int64 
     MyType(a,b) = new(a,b) 
     end 

注:それはと同等です。ジュリアはまだそれらのエントリが何であるかを知らない、それはエラーが不平を言っていることです。 次の例を見てみましょう:aはタイプInt、ないVector{Int}であるため

julia> a = Array{Complex}(5) 
5-element Array{Complex{T<:Real},1}: 
#undef 
#undef 
#undef 
#undef 
#undef 

ところで、私は、あなたがこの行MyArray[1].a = [1 2 3]をどうする何を意味するのか分かりません。あなたが配列の最初の要素が定義されていないため

MyArray[1] = MyType(4, 5) 

のようなものを書くようになった

2

この行は意味

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

ことはありません。 MyArray[1].aは、未定義オブジェクトのaメンバーにアクセスしようとしていることを意味します。それはうまくいきません。

MyTypeオブジェクトの初期化された5要素配列を作成する場合は、代わりにこのようなことを行うことができます。

fill(MyType(0, 0), 10) 
関連する問題