C++ Шаблон класса массива с параметрами шаблона
Я создал шаблон класса Array с параметрами шаблона <тип элемента, размер> и членами класса массива, функциями ввода, сортировки и вывода.
но код не работает ниже, что я могу делать неправильно?
#include <iostream>
using namespace std;
template <class T, int n>
class array {
T mass[n];
public:
void input();
void output();
void sort();
};
template <class T, int n>
void array < T, n > ::input() {
for (int i = 0; i < n; i++)
cin >> mass[i];
}
template <class T, int n>
void array < T, n > ::output() {
for (int i = 0; i < n; i++)
cout << mass[i] << '\0';
}
template <class T, int n>
void array < T, n > ::sort()[T x; int p = 1, m = n;
while (p) {
p = 0;
for (int i = 0; i < m - 1; i++)
if (mas[i] > mas[i + 1])
[x = mass[i]; mass[i] = mass[i + 1]; mass[i + 1] = x; p = 1;
}
m--;
}
}
int main() {
array < int, 10 > a;
array < float, 5 > b;
a.input();
a.sort();
a.output();
b.input();
b.sort();
b.output();
return 0;
}
я получаю следующую ошибку компилятора, что я могу сделать неправильно в этом коде?
25 | void array < T, n > ::sort()[T x; int p = 1, m = n;
| ^
/tmp/ZOMErK6tKN.cpp:25:33: error: expected ']' before 'x'
25 | void array < T, n > ::sort()[T x; int p = 1, m = n;
| ^~
| ]
/tmp/ZOMErK6tKN.cpp:25:52: error: 'n' was not declared in this scope
25 | void array < T, n > ::sort()[T x; int p = 1, m = n;
| ^
/tmp/ZOMErK6tKN.cpp:26:5: error: expected unqualified-id before 'while'
26 | while (p) {
| ^~~~~
/tmp/ZOMErK6tKN.cpp:32:7: error: 'm' does not name a type
32 | m--;
| ^
/tmp/ZOMErK6tKN.cpp:33:5: error: expected declaration before '}' token
33 | }
| ^
/tmp/ZOMErK6tKN.cpp:34:3: error: expected declaration before '}' token
34 | }```
2 ответа
В этой строке:
void array < T, n > ::sort()[T x; int p = 1, m = n;
если это
[
быть
{
Также я думаю, что вы можете реализовать этот вид, используя стандартную библиотеку
void array < T, n > ::sort() {
std::sort(std::begin(mass), std::end(mass));
}
У вас есть опечатки в коде. В частности, вы используете
[
вместо
{
а также
mas
вместо
mass
. Они верны и выделены комментариями в приведенном ниже коде:
template <class T, int n>
//----------------------------v------------------->[ changed to {
void array < T, n > ::sort(){T x; int p = 1, m = n;
while (p) {
p = 0;
for (int i = 0; i < m - 1; i++)
//----------vvvv------vvvv----------------------->mas changed to mass
if (mass[i] > mass[i + 1])
//--------v-------------------------------------->[ changed to {
{x = mass[i]; mass[i] = mass[i + 1]; mass[i + 1] = x; p = 1;
}
m--;
}
}