ListBox with custom components fails

I know that there are like a million discussions about this topic, but I just can’t figure it out.
I’m trying to create a scrollable list of “tracks”, stacked on top of each other from the very top of the screen, colored in different colors.
I got a MainComponent class, which owns a custom component named TimeLineSection. TimeLineSection inherits from ListBoxModel, owns the ListBox itself, and owns the data for the track components (not the components themself). To Draw the tracks, I’m using the refreshComponentForRow (hopefully the right way…), and returning from a custom component named TrackTimeLineComponent, which actually draws the tracks name and color.

The issue is that when I run the program, it just crashes (I’ll add a picture of the exception).

This is the code & picture, help would be awesome!:

MainComponent.h
#include “Sections/TimeLine/TimeLineSection.h”

class MainComponent : public juce::Component
{
public:
MainComponent();
~MainComponent() override;

void paint(juce::Graphics&) override;
void resized() override;

private:
TimeLineSection _timeLineSection;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MainComponent)

};

MainComponent.cpp
#include “MainComponent.h”

MainComponent::MainComponent()
{
addAndMakeVisible(this->_timeLineSection); //crashes here!

setSize(600, 400);

}

MainComponent::~MainComponent()
{
}

void MainComponent::paint(juce::Graphics& g)
{
g.fillAll(juce::Colour(69, 131, 109));
}

void MainComponent::resized()
{
this->_timeLineSection.setBounds(this->getLocalBounds());
}

TimeLineSection.h
#include <JuceHeader.h>
#include
#include

class TimeLineSection : public juce::Component,
public juce::ListBoxModel
{
public:
TimeLineSection();
~TimeLineSection() override;

void paint (juce::Graphics&) override;
void resized() override;

int getNumRows() override;
void paintListBoxItem(int rowNumber, juce::Graphics& g, int width, int height, bool rowIsSelected) override;
juce::Component* refreshComponentForRow(int rowNumber, bool isRowSelected, juce::Component* existingComponentToUpdate) override;

private:
std::vector<std::map<std::string, std::string>> _tracks;
juce::ListBox _listBox;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TimeLineSection)

};

TimeLineSection.cpp
#include <JuceHeader.h>

#include “TimeLineSection.h”
#include “TrackTimeLineComponent.h”

TimeLineSection::TimeLineSection() :
_listBox(“Track List Box”, nullptr)
{
this->_tracks = {
{
{ “name”, “aaa” },
{ “color”, “8F2508” },
},
{
{ “name”, “bbb” },
{ “color”, “67A808” },
},
{
{ “name”, “ccc” },
{ “color”, “0B91B9” },
},
{
{ “name”, “ddd” },
{ “color”, “660AB2” },
},
{
{ “name”, “eee” },
{ “color”, “A73460” },
},
{
{ “name”, “aaa” },
{ “color”, “8F2508” },
},
{
{ “name”, “bbb” },
{ “color”, “67A808” },
},
{
{ “name”, “ccc” },
{ “color”, “0B91B9” },
},
{
{ “name”, “ddd” },
{ “color”, “660AB2” },
},
{
{ “name”, “eee” },
{ “color”, “A73460” },
},
};

addAndMakeVisible(this->_listBox);
this->_listBox.setModel(this);

}

TimeLineSection::~TimeLineSection()
{
}

void TimeLineSection::paint (juce::Graphics& g)
{
}

void TimeLineSection::resized()
{
this->_listBox.setBounds(this->getLocalBounds());
}

int TimeLineSection::getNumRows()
{
return this->_tracks.size();
}

void TimeLineSection::paintListBoxItem(int rowNumber, juce::Graphics& g, int width, int height, bool rowIsSelected)
{
}

juce::Component* TimeLineSection::refreshComponentForRow(int rowNumber, bool isRowSelected, juce::Component* existingComponentToUpdate)
{
if (rowNumber < this->getNumRows())
{
if (existingComponentToUpdate == nullptr)
{
return new TrackTimeLineComponent(this->_tracks[rowNumber][“name”], this->_tracks[rowNumber][“color”]);
}
else
{
return existingComponentToUpdate;
}
}
}

TrackTimeLineComponent.h
#include <JuceHeader.h>

class TrackTimeLineComponent : public juce::Component
{
public:
TrackTimeLineComponent(std::string name, std::string colour);
~TrackTimeLineComponent() override;

void paint (juce::Graphics&) override;
void resized() override;

private:
juce::Label _nameLabel;
std::string _colour;

JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (TrackTimeLineComponent)

};

TrackTimeLineComponent.h
#include <JuceHeader.h>

#include “TrackTimeLineComponent.h”

TrackTimeLineComponent::TrackTimeLineComponent(std::string name, std::string colour) :
_colour(colour)
{
addAndMakeVisible(this->_nameLabel);
this->_nameLabel.setText(name, juce::dontSendNotification);
this->_nameLabel.setColour(juce::label::textColourId, juce::Colours::orange);
this->_nameLabel.setJustificationType(juce::Justification::right);
}

TrackTimeLineComponent::~TrackTimeLineComponent()
{
}

void TrackTimeLineComponent::paint (juce::Graphics& g)
{
g.fillAll (juce::Colour::fromString(this->_colour));
}

void TrackTimeLineComponent::resized()
{
this->_nameLabel.setBounds(getLocalBounds());
}