Массив обьектов. Шаблоны классов С++

336
12 ноября 2017, 17:16

Как создать массив обьектов из шаблонных классов? Вот моя попытка.

Ошибка: ain.cpp: In function 'int main()': main.cpp:46:28: error: no matching function for call to 'Mnozhina::Mnozhina(int&)'
Mnozhina myStack(n); ^ main.cpp:13:5: note: candidate: Mnozhina::Mnozhina() [with T = int] Mnozhina() ^~~~~~~~ main.cpp:13:5: note: candidate expects 0 arguments, 1 provided main.cpp:7:7: note: candidate: constexpr Mnozhina::Mnozhina(const Mnozhina&) class Mnozhina ^~~~~~~~ main.cpp:7:7: note: no known conversion for argument 1 from 'int' to 'const Mnozhina&'

Mnozhina <int > myStack(n);
Я понимаю что такое <int > если мы используем template <typename T> Но как подобное будет выглядеть когда мы запишем template <class T>

И где в моем коде ошибки и какие. Так как в STL, я пока полный нуб.

#include <iostream>
#include <string>
using namespace std;
template <class T>
class Mnozhina
{
private:
  int n;
  int * arr=new int [n];
public:
    Mnozhina()
    {
      n=10;
    }
    ~Mnozhina();
    void set_Mnozhina()
    {
      //cout<<"numbers of elements is here: ";
      //cin>>n;
      for(int i=0;i<n;i++)
      {
        arr[i]=2*i;  // parni numbers 
      }
    }
    void get_Mnozshina()
    { 
      cout<<"array is here =) :";
      for(int i=0;i<n;i++)
      {
        cout<<arr[i]<<" ";
      }
    }

};
int main () 
{  
  int n;
  cout<<"numbers of elements is here: ";
  cin>>n;
  Mnozhina <int > myStack(n);
   return 0;
}
Answer 1

Ваша главная ошибка - отсутствие конструктора, который бы получал int в качестве аргумента.

Далее, у вас объявлен деструктор, но не реализован.

Инициализировать arr все же лучше в конструкторе.

Раз вы работаете с динамической памятью, нужно или написать копирующий конструктор и оператор присваивания, или их запретить.

В деструкторе надо удалять выделенную память.

Т.е. для начала - что-то вроде

template <class T>
    class Mnozhina
{
private:
    int n;
    int * arr;
public:
    Mnozhina(int n = 10):n(n),arr(new int[n])
    {
        set_Mnozhina();
    }
    ~Mnozhina() { delete[] arr; }
    Mnozhina(const Mnozhina&) = delete;
    Mnozhina& operator=(const Mnozhina&) = delete;

    void set_Mnozhina()
    {
        //cout<<"numbers of elements is here: ";
        //cin>>n;
        for(int i=0;i<n;i++)
        {
            arr[i]=2*i;  // parni numbers
        }
    }
    void get_Mnozshina()
    {
        cout<<"array is here =) :";
        for(int i=0;i<n;i++)
        {
            cout<<arr[i]<<" ";
        }
    }

};
int main ()
{
    int n;
    cout<<"numbers of elements is here: ";
    cin>>n;
    Mnozhina<int> myStack(n);
    myStack.get_Mnozshina();
    return 0;
}
READ ALSO
std::cout не выводит данные в консоль

std::cout не выводит данные в консоль

У меня есть код, который выводит в консоль некоторый текст:

279
Удаление QDialog с помощью delete

Удаление QDialog с помощью delete

Имеется следующий кусочек кода:

248
std::function для шаблонных функций

std::function для шаблонных функций

Есть такой класс

312
Возвращение массива функцией

Возвращение массива функцией

Есть кодВ функции double f(double x[], int n) делается вычисление нескольких функций с несколькими переменными

243