C/C++

Из за чего выходит ошибка unresolved external symbol?

Как это исправить?
AG
Aleksandr Goloverda
1 675
Разбирайтесь в виртуальном наследовании...

#include <iostream>
#include <span>
using namespace std;
struct BaseSort {
virtual void sort(int* box, const size_t len) = 0;
};
struct BubbleSort : virtual public BaseSort {
void sort(int* box, const size_t n) override {
auto first = box;
auto last = box + n;
while (first < --last) {
for (auto begin = first; begin < last; ++begin) {
if (*(begin + 1) < *begin) {
swap(*begin, *(begin + 1));
}
}
}
}
};
struct SelectionSort : virtual public BaseSort {
void sort(int* box, const size_t n) override {
for (int i = 0; i < n - 1; ++i) {
int m = i;
for (int j = i + 1; j < n; j++) {
if (box[j] < box[m]) {
m = j;
}
}
swap(box[i], box[m]);
}
}
};
void show(span<int> box) {
for (auto x : box) cout << x << ' ';
puts("");
}
int main() {
int a[]{ 3, 5, 2, 4, 6, 9, 7, 8, 1 };
show(a);
BubbleSort bs;
bs.sort(a, size(a));
show(a);
puts("");
int b[]{ 3, 5, 2, 4, 6, 9, 7, 8, 1 };
show(b);
SelectionSort ss;
ss.sort(b, size(b));
show(b);
system("pause > nul");
}
Я-
Яна ----
92 038
Лучший ответ
Метод SortingAlgoritm::sort не имеет реализации, а должен её иметь в соответствии с его описанием. Надо создать тело метода, или объявить метод как абстрактный.
ИС
Игорь Суслов
58 065
Aleksandr Goloverda Хорошо, а как исправить?
А реализация метода может быть виртуальной?
Aleksandr Goloverda virtual нужен лишь для того, чтобы метод можно было переопределять. Если метод не объявить как virtual, то подклассы не смогут его переопределить. В Java это выглядело бы так:
final void doSomething();