# Need help with MethodError: ambigous

How to solve this “ambigous” problem by fixing the syntax?

``````julia> struct Element
a::Vector

function Element(x::Vector)
new(x)
end
end

julia> function (elt_type::Type{T})(pts::Vector{Int}) where T<:Element
2
end

julia> Element([1,3])
ERROR: MethodError: Element(::Array{Int64,1}) is ambiguous. Candidates:
(elt_type::Type{T})(pts::Array{Int64,1}) where T<:Element in Main at REPL[2]:2
Element(x::Array{T,1} where T) in Main at REPL[1]:5
Possible fix, define
Element(::Array{Int64,1})

``````

Is this what you mean?

``````julia> struct Element
a::Vector

function Element(x::Vector)
new(x)
end
end

julia> Element(pts::Vector{Int}) = 2
Element

julia> Element([1,3])
2
``````

I am sorry, the upper is my simplied version of the bellow code. How to fix it with your idea above?

``````julia> struct Element{DIM,N}
a::Int
b::Vector
function Element{DIM,N}(connectivity::Vector) where {DIM,N}
new(3, connectivity)
end
end

julia> struct Point
idx::Int
coord::Vector{Float64}
weight::Float64
end

julia> function (elt_type::Type{T})(pts::Vector{Point}) where T<:Element
2
end

julia> pts1 = Point(1, [23.0, 21.0, 32.0], 4.0);

julia> pts2 = Point(45, [23, 21, 2], 1.0);

julia> r = [pts1, pts2]
2-element Array{Point,1}:
Point(1, [23.0, 21.0, 32.0], 4.0)
Point(45, [23.0, 21.0, 2.0], 1.0)

julia> Element{2,4}(r)
ERROR: MethodError: Element{2,4}(::Array{Point,1}) is ambiguous. Candidates:
(elt_type::Type{T})(pts::Array{Point,1}) where T<:Element in Main at REPL[3]:2
(::Type{Element{DIM,N}})(connectivity::Array{T,1} where T) where {DIM, N} in Main at REPL[1]:5
Possible fix, define
(::Type{Element{DIM,N}})(::Array{Point,1})

``````

Replace

``````function (elt_type::Type{T})(pts::Vector{Point}) where T<:Element
2
end
``````

with

``````function Element{DIM,N}(connectivity::Vector{Point}) where {DIM,N}
2
end
``````

maybe?

``````julia> Element{2,4}(r)
2
``````