# Error when adding vectors

**URL:** https://discourse.julialang.org/t/error-when-adding-vectors/80541
**Category:** New to Julia
**Tags:** question, struct
**Created:** [May 5, 2022, 1:22pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541 "2022-05-05T13:22:05Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![vamp](https://avatars.discourse-cdn.com/v4/letter/v/f4b2a3/32.png) [@vamp](https://discourse.julialang.org/u/vamp)
#### Post date: [May 5, 2022, 1:22pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/1 "2022-05-05T13:22:05Z")

</div>

Hello, I am new here and I would like to know why I can’t add these vectors:

```nohighlight
mutable struct Mystruct
    a::Int
    b::SVector{3, Int64}
    c::Int 
end

v1=[Mystruct(1,(-2,-2,2),1)]
v2=[Mystruct(2,(2,2,2),1)]

v3 = v1 + v2

```

`ERROR: MethodError: no method matching +(::Mystruct, ::Mystruct)`

---

<div class="post-metadata">

### Author: ![skleinbo](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/skleinbo/32/36080_2.png) [@skleinbo](https://discourse.julialang.org/u/skleinbo)
#### Post date: [May 5, 2022, 1:28pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/2 "2022-05-05T13:28:43Z")

</div>

By “add” you mean, join `v1` and `v2`?

Either `[v1; v2]` or `vcat(v1, v2)` does that. This will return a fresh vector. If you want to add the elements of `v2` to the existing `v1`, use `append!(v1, v2)`.

```julia
julia> [v1; v2]
2-element Vector{Mystruct}:
 Mystruct(1, [-2, -2, 2], 1)
 Mystruct(2, [2, 2, 2], 1)

```

---

<div class="post-metadata">

### Author: ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)
#### Post date: [May 5, 2022, 1:30pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/3 "2022-05-05T13:30:25Z")

</div>

If you actually want to add instances of your type, you will have to tell Julia how addition is supposed to work for them. Something like:

```julia
julia> v1=[Mystruct(1,[1,2],1)]
1-element Vector{Mystruct}:
 Mystruct(1, [1, 2], 1)

julia> v2=[Mystruct(1,[3,4],1)]
1-element Vector{Mystruct}:
 Mystruct(1, [3, 4], 1)

julia> +(x::Mystruct, y::Mystruct) = Mystruct(x.a + y.a, x.b .+ y.b, x.c + y.c)
+ (generic function with 209 methods)

julia> v1+v2
1-element Vector{Mystruct}:
 Mystruct(2, [4, 6], 2)

```

(note here I’ve simplified things by replacing the `SVector` with a plain `Vector` in the struct definition)

---

<div class="post-metadata">

### Author: ![rafael.guerra](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rafael.guerra/32/216610_2.png) [@rafael.guerra](https://discourse.julialang.org/u/rafael.guerra)
#### Post date: [May 5, 2022, 1:40pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/4 "2022-05-05T13:40:25Z")

</div>

Don’t we need first to `import Base.+` , before adding the new methods?

---

<div class="post-metadata">

### Author: ![vamp](https://avatars.discourse-cdn.com/v4/letter/v/f4b2a3/32.png) [@vamp](https://discourse.julialang.org/u/vamp)
#### Post date: [May 5, 2022, 1:42pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/5 "2022-05-05T13:42:05Z")

</div>

> [@nilshg](#):
>
> `v2=[Mystruct(1,[3,4],1)]`

With

```julia
mutable struct Mystruct
    a::Int
    b::Vector{ Int64}
    c::Int 
end

v1=[Mystruct(1,[1,2],1)]
v2=[Mystruct(1,[3,4],1)]

+(x::Mystruct, y::Mystruct) = Mystruct(x.a + y.a, x.b .+ y.b, x.c + y.c)
import Base: +
v1 + v2

```

`ERROR: MethodError: no method matching +(::Vector{Mystruct}, ::Vector{Mystruct}) You may have intended to import Base.:+`

---

<div class="post-metadata">

### Author: ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)
#### Post date: [May 5, 2022, 1:46pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/6 "2022-05-05T13:46:02Z")

</div>

The `import` needs to come before the definition of the function for this to work.

(Test it in fresh REPL.)

---

<div class="post-metadata">

### Author: ![vamp](https://avatars.discourse-cdn.com/v4/letter/v/f4b2a3/32.png) [@vamp](https://discourse.julialang.org/u/vamp)
#### Post date: [May 5, 2022, 1:49pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/7 "2022-05-05T13:49:00Z")

</div>

```julia
using StaticArrays
mutable struct Mystruct
    a::Int
    b::SVector{3, Int64}
    c::Int 
end

v1=[Mystruct(1,(-2,-2,2),1)]
v2=[Mystruct(2,(2,2,2),1)]
import Base: +
+(x::Mystruct, y::Mystruct) = Mystruct(x.a + y.a, x.b .+ y.b, x.c + y.c)
v3 = v1 + v2

```

Done, thanks!

---

<div class="post-metadata">

### Author: ![nilshg](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/nilshg/32/2283_2.png) [@nilshg](https://discourse.julialang.org/u/nilshg)
#### Post date: [May 5, 2022, 2:11pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/8 "2022-05-05T14:11:15Z")

</div>

Sorry I had actually done this but forgot to copy that line!

---

<div class="post-metadata">

### Author: ![lmiq](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/lmiq/32/18314_2.png) [@lmiq](https://discourse.julialang.org/u/lmiq)
#### Post date: [May 5, 2022, 2:21pm UTC](https://discourse.julialang.org/t/error-when-adding-vectors/80541/9 "2022-05-05T14:21:25Z")

</div>

> [@vamp](#):
>
> `v1=[Mystruct(1,(-2,-2,2),1)]`

Why the braces here? This is creating a one-element vector of your structures. Is that what you want?
