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

Не понимаю как надо компилятору скормить реали3ацию класса с шаблоном?

Хочу со3дать класс с сортировками, пока что есть одна с квадратичной сложностью. Со3дал класс - каждый метод будет сортировкой, но для ра3ных типов данных. Компилятор ругается, файл main.cpp:
#include "Sorts.h"


int main()
{
	const int iSize = 10,
		dSize = 7,
		fSize = 10,
		cSize = 255;
	// массивы разных типов данных
	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" };
	for (int i = 0; i < 255; i++)
		cArray[i] = i;
	
	auto sorti = new Sorts<int>();
	sorti->Sorting(iArray, iSize);
	auto sortd = new Sorts<double>();
	sortd->Sorting(dArray, dSize);
	auto sortf = new Sorts<float>();
	sortf->Sorting(fArray, fSize);
	//sort->Sorting(fArray, fSize);
	auto sortc = new Sorts<char>();
	sortc->Sorting(cArray, cSize);
	//sort->Sorting(cArray, cSize);
	std::cout << "\t\t Шаблон функции вывода массива на экран\n\n";
	// вызов локальной версии функции printArray для типа int через шаблон
	std::cout << "\nМассив типа int:\n"; 
	sorti->printArray(iArray, iSize);
	// вызов локальной версии функции printArray для типа double через шаблон
	std::cout << "\nМассив типа double:\n"; 
	sortd->printArray(dArray, dSize);
	// вызов локальной версии функции printArray для типа float через шаблон
	std::cout << "\nМассив типа float:\n"; 
	sortf->printArray(fArray, fSize);
	// вызов локальной версии функции printArray для типа char через шаблон
	std::cout << "\nМассив типа char:\n"; 
	sortc->printArray(cArray, cSize);
    return 0;
}

Файл Sorts.h
#pragma once
#include <iostream>
template <typename T> class Sorts
{
public:
	T* Sorting(T* mas, int size);
	void printArray(const T* arr, int count); // конец шаблона функции printArray;
};

и файл Sorts.cpp
#include "Sorts.h"

T* Sorts::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 Sorts::printArray(const T* arr, int count)
{
	for (int ix = 0; ix < count; ix++)
		std::cout << arr[ix] << "   ";
	std::cout << std::endl;
} // конец шаблона функции printArray;

Ошибки все в файле реали3ации класса
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ответы на вопрос 1
olkhovichs
@olkhovichs
Переместите реализацию sorts.cpp в sorts.h
Почитать можно тут:
1 и 2
Ответ написан
Ваш ответ на вопрос

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

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