
C/C++
Из за чего выходит ошибка unresolved external symbol?
Как это исправить?


Разбирайтесь в виртуальном наследовании...
#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");
}
#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");
}
Метод SortingAlgoritm::sort не имеет реализации, а должен её иметь в соответствии с его описанием. Надо создать тело метода, или объявить метод как абстрактный.
Aleksandr Goloverda
Хорошо, а как исправить?
А реализация метода может быть виртуальной?
Aleksandr Goloverda
virtual нужен лишь для того, чтобы метод можно было переопределять. Если метод не объявить как virtual, то подклассы не смогут его переопределить. В Java это выглядело бы так:
final void doSomething();
final void doSomething();
Похожие вопросы
- Нужно перенести данный с одного .txt файла в другой(пустой), но с моим вариантом выходит ошибка fopen(небезопасный путь)
- Ошибка C2280 предпринята попытка ссылки на удаленную функцию C++
- Помогите найти ошибки в коде на C++, не выводится последняя строчка
- Как решить ошибку C2079 использует не имеющую определения структуру class C++
- Как решить ошибки E0144 и E0077 C++
- Ошибка в динамическом массиве new[] и delete[] |С++ Builder
- Синтаксическая ошибка класса. C++
- C++, начало. Помогите понять синтаксис, ошибки.
- Ошибки в коде c++
- Ошибка в С++