I'm new to c++ but I have experience with OOP in other languages such as java. I have three classes: class Sortable {...};, class Letter: Sortable {...};, and class Sorter {...};. Sorter has a public function vector<Sortable> sort(vector<Sortable> items_).
In main, I make a vector, vector<Letter> letters; which I give some Letter objects. I then create a Sorter object and use its sort function:
Sorter sorter = Sorter();
vector<Sortable> sortedLetters = sorter.sort(letters);
On that second line I get two errors: No viable conversion from 'vector<Letter>' to 'vector<Sortable>' and No viable conversion from 'vector<Sortable>' to 'vector<Letter>'. That error makes sense but it leaves me with no idea how to make a function which accepts any derived class of a base class.
minimum reproducible example:
#include <iostream>
#include <vector>
using namespace std;
class Sortable {
public:
    virtual int getSortValue() = 0;
};
class Letter: Sortable {
    int sortValue;
public:
    Letter(int f);
    int getSortValue();
};
Letter::Letter(int f) {
    sortValue = f;
}
int Letter::getSortValue(){
    return sortValue;
}
class Sorter {
public:
    Sorter();
    vector<Sortable> sort(vector<Sortable> items_);
};
Sorter::Sorter() = default;
vector<Sortable> sort(vector<Sortable> items_) {
    return items_;
}
int main(int argc, const char * argv[]) {
    Letter a = Letter(1);
    Letter b = Letter(4);
    Letter c = Letter(3);
    Letter d = Letter(2);
    vector<Letter> letters {a,b,c,d};
    Sorter sorter = Sorter();
    vector<Letter> sortedLetters = sorter.sort(letters);
    
    return 0;
}
 
    