Возможно, вы путаете std :: strings со встроенными символьными массивами.std :: strings не являются массивами, хотя ведут себя аналогично массивам (у класса есть перегруженный оператор []) и содержат массивы (к которым вы можете получить доступ через c_str ()).
Если вы замените строку 10 на
char testStr[] = "testing";
Ваша программа будет скомпилирована и запущена.
Или вы можете попробовать что-то вроде:
#include <iostream>
#include <set>
template <typename T>
int reduce(const T* ar, int n);
int main()
{
long test[] = {1, 2, 1, 3, 3, 4, 1};
std::string testStr = "testing";
std::cout << reduce(test, 7) << std::endl;
std::cout << reduce(testStr.c_str(), testStr.size()) << std::endl;
std::cin.get();
return 0;
}
template <typename T>
int reduce (const T* ar, int n)
{
std::set<T> test;
for(int i = 0; i < n; i++)
{
test.insert(ar[i]);
}
return test.size();
}