Gremlin92
@Gremlin92
Целеустремленный

Что 3а ошибка в коде?

#include <iostream>

template <typename T>
//T a;
class Sort
{
public:
	Sort() {};
private:
	T* Sorting(T* mas, int size);
	void printArray(const T* arr, int count)
};
T* Sort::Sorting(T* mas, int size)
{
	T tmp;
	for (int i = 0; i < size; i++)
		for (int j = 0; j < size; j++)
			if (mas[i] < mas[j])
			{
				tmp = mas[i];
				mas[i] = mas[j];
				mas[j] = tmp;
			}
	return (T*)mas;
};
void Sort::printArray(const T* arr, int count)
{
	for (int ix = 0; ix < count; ix++)
		std::cout << arr[ix] << "   ";
	std::cout << std::endl;
}; // конец шаблона функции printArray
int main()
{
	const int iSize = 10,
		dSize = 7,
		fSize = 10,
		cSize = 15;
	// массивы разных типов данных
	int    iArray[iSize] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	double dArray[dSize] = { 1.2345, 2.234, 3.57, 4.67876, 5.346, 6.1545, 7.7682 };
	float  fArray[fSize] = { 1.34, 2.37, 3.23, 4.8, 5.879, 6.345, 73.434, 8.82, 9.33, 10.4 };
	char   cArray[cSize] = { "MARShdkeitocm8" };
	Sort *sort = new Sort();
	sort->Sorting(iArray, iSize);
	sort->Sorting(dArray, dSize);
	sort->Sorting(fArray, fSize);
	sort->Sorting(cArray, cSize);
	std::cout << "\t\t Шаблон функции вывода массива на экран\n\n";
	// вызов локальной версии функции printArray для типа int через шаблон
	std::cout << "\nМассив типа int:\n"; 
	sort->printArray(iArray, iSize);
	// вызов локальной версии функции printArray для типа double через шаблон
	std::cout << "\nМассив типа double:\n"; 
	sort->printArray(dArray, dSize);
	// вызов локальной версии функции printArray для типа float через шаблон
	std::cout << "\nМассив типа float:\n"; 
	sort->printArray(fArray, fSize);
	// вызов локальной версии функции printArray для типа char через шаблон
	std::cout << "\nМассив типа char:\n"; 
	sort->printArray(cArray, cSize);
    return 0;
}
  • Вопрос задан
  • 89 просмотров
Решения вопроса 1
vabka
@vabka
Токсичный шарпист
Код абсолютно дебильный какой-то.
1. Нафига тут вообще класс использовать в таком виде?
2. У вас шаблон на классе - так что надо указывать параметр шаблона при инициализации класса Sor
3. Sorting и PrintArray приватные - нельзя их просто так вызвать
4. Что это вообще за название "Sorting"?
5. А зачем метод для печати массива у класса, который должен типа сортировкой заниматься?
6. В C++ еть тип std::array, который позволяет нормально передавать размеры масива при помощи шаблонов, а не отдельным параметром.
Короче тут разбирать - не разберёшь
Вот в таком виде уже всё это дело компилируется:
#include <iostream>

template <typename T> class Sort {
public:
  Sort(){};
  T *Sorting(T *mas, int size) {
    T tmp;
    for (int i = 0; i < size; i++)
      for (int j = 0; j < size; j++)
        if (mas[i] < mas[j]) {
          tmp = mas[i];
          mas[i] = mas[j];
          mas[j] = tmp;
        }
    return mas;
  }
  void printArray(const T *arr, int count) {
    for (int ix = 0; ix < count; ix++)
      std::cout << arr[ix] << "   ";
    std::cout << std::endl;
  }
};
int main() {
  const int iSize = 10;
  int iArray[iSize] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
  auto sort = new Sort<int>();
  sort->Sorting(iArray, iSize);
  std::cout << "\t\t Шаблон функции вывода массива на экран\n\n";
  std::cout << "\nМассив типа int:\n";
  sort->printArray(iArray, iSize);
  return 0;
}

В принципе такой код достоит сайта говнокод ру
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы