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--;
    }
  }
Другие вопросы по тегам