How do I use multiple headers files in subfolders with Arduino?

So I have multiple files in my project (a simple Blink project) but I’m learning OOP w/ C++ so I’d like to use multiple files and subfolders. I can’t seem to understand why I get the error:

/home/zastrix/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: sketch/src.ino.cpp.o:(.text.loop+0x8): undefined reference to `Blink::Blink(int, bool)'
/home/zastrix/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: sketch/src.ino.cpp.o:(.text.loop+0xc): undefined reference to `Blink::toggleOn()'
/home/zastrix/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: sketch/src.ino.cpp.o:(.text.loop+0x10): undefined reference to `Blink::~Blink()'
/home/zastrix/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: sketch/src.ino.cpp.o:(.text.loop+0x27): undefined reference to `Blink::Blink(int, bool)'
/home/zastrix/.arduino15/packages/esp8266/tools/xtensa-lx106-elf-gcc/2.5.0-4-b40a506/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: sketch/src.ino.cpp.o: in function `loop':
/home/zastrix/Documents/Personal/Arduino/oop-led/src/src.ino:13: undefined reference to `Blink::toggleOn()'

Here’s the code:

Main file:

#include <ESP8266WiFi.h>
#include "blink/Blink.h"

void setup()
{
    Serial.begin(115200);
    while(!Serial.available()) {};
}

void loop()
{
    delay(1000);
    Blink blink(16);
    Serial.write("Toggling on...\n");
    blink.toggleOn();
    delay(1000);
    Serial.write("Deleting...\n");
}

Blink.h:

#ifndef BLINK_H
#define BLINK_H

class Blink
{
    private:
        int pin;
        bool status, inverted;
    public:
        Blink(int pin, bool inverted = false);
        void toggleOn();
        void toggleOff();
        ~Blink();
};

#endif

Blink.cpp:

// Gotta include this for ESP8266 support.
#include <ESP8266WiFi.h>
#include "Blink.h"

Blink::Blink(int pin, bool inverted)
{
    this -> pin = pin;
    this -> inverted = inverted;
    pinMode(pin, OUTPUT);
}

void Blink::toggleOn()
{
    digitalWrite(pin, inverted ? HIGH : LOW);
    status = true;
}

void Blink::toggleOff()
{
    digitalWrite(pin, inverted ? LOW : HIGH);
    status = false;
}

Blink::~Blink()
{
    toggleOff();
}

And this is my tree:

src
├── blink
│   ├── Blink.cpp
│   └── Blink.h
└── src.ino

Edit:

I can make this work in one-big folder but I’d like to separate them into folders so I can get the grasp of it.

I’d like to separate them into folders so I can get the grasp of it.

The IDE just isn’t that smart.

First, the folder "blink" should really be "Blink", to match the .h/.cpp files contained therein. Case matters.

Here's what I do, that at least works.

SomeSketch
SomeSketch.ino
src
SomeInclude
SomeInclude.h
SomeInclulde.cpp
SomeOtherInclude
SomeOtherInclude.h
SomeOtherInclulde.cpp

The #include in the .ino file must be:

#include "src/SomeInclude/SomeInclude.h"

If SomeInclude needs to reference SomeOtherInclude, it must include it as:

#include "../SomeOtherInclude/SomeOtherIncude.h"

Regards,
Ray L.