Ошибка error C2039: {ctor}: не является членом

297
15 декабря 2016, 16:00

Дано: число N и последовательность a1, a2, … aN

Создать шаблон класса, порождающий динамические одномерные массивы с элементами различных типов (вещественные, целочисленные, символьные и т.д.). Тип данных и результат являются параметрами по отношению к классу, программа должна иметь методы инициализации, конструктор, деструктор, метод просмотра значений созданного массива, согласно заданному алгоритму.

(a1*a1), (a1*a2), …, (a1*aN);

Код

#include "stdafx.h"
#include "iostream"
using namespace std;
template <typename T>
class Mas
{  
   private:
       T N;
       T* mas;
   public:
       void set(T N);
       void print();
};
template <typename T>
Mas<T>::Mas(T N)
{
    mas = new T [N];
    for(int i(0);i<=N;i++)
    {   
        cin>>mas[i];
    }
}
template <typename T>
Mas<T>::~Mas()
{
    delete [] mas;
}
template <typename T>
 Mas<T>::Mas()
{}
template <typename T>
void Mas<T>::set(T N)
{
    mas = new T [N];
    for(int i(0);i<=N;i++)
    {   
        cin>>mas[i];
    }
};
template <typename T>
void Mas<T>::print()
{
    for(int i(0);i<=N;i++)
 {   
    cout<<mas[i] = mas[1]*mas[i];
    }
}
int _tmain(int argc, _TCHAR* argv[])
{
    Mas<int> a;
    a.set(3);
    a.print();
    return 0;
}

Выдает ошибки:

    Ошибка    1   error C2039: {ctor}: не является членом

"Mas<T>" c:\users\user\desktop\dz 6\dz 6\dz 6.cpp 33 1 DZ 6

Ошибка    2   error C2039: {dtor}: не является членом

"Mas<T>" c:\users\user\desktop\dz 6\dz 6\dz 6.cpp 40 1 DZ 6

Ошибка    3   error C2039: {ctor}: не является членом

"Mas<T>" c:\users\user\desktop\dz 6\dz 6\dz 6.cpp 44 1 DZ 6

Как избавится от ошибок, и правильно ли я решил задачу?

Answer 1

Исправил пачку ошибок, читайте комментарии в коде. Оно теперь компилируется, вроде что-то делает. Правильно или нет, не знаю, я не Ваш учитель.

#include "iostream"
using namespace std;
template <typename T>
class Mas
{  
   private:
       T N;
       T* mas;
   public:
       void set(T N);
       void print();
       Mas(T N); // нужно объявлять конструкторы и деструкторы
       Mas();
       ~Mas();
};
template <typename T>
Mas<T>::Mas(T N)
{
    mas = new T [N];
    for(int i = 0; i < N; i++) // в оригинальной записи есть выход за пределы
    {   
        cin>>mas[i];
    }
}
template <typename T>
Mas<T>::~Mas()
{
    delete [] mas;
}
template <typename T>
 Mas<T>::Mas()
{}
template <typename T>
void Mas<T>::set(T N)
{
    // эта функция может быть причиной утечек. Представьте, что ее вызвали дважды в коде
    mas = new T [N];
    for(int i = 0; i < N; i++)
    {   
        cin>>mas[i];
    }
};
template <typename T>
void Mas<T>::print()
{
    for(int i = 0; i < N; i++)
    {   
    //cout<<mas[i] = mas[1]*mas[i]; тут бред написан.
    // если это печать, то почему она пытается изменять элементы массива?
    // может просто вывести элементы?
    cout << mas[i] << " ";
    }
}
int main(int argc, char* argv[])
{
    Mas<int> a;
    a.set(3);
    a.print();
    return 0;
}
READ ALSO
Вставить символ в слово между символами

Вставить символ в слово между символами

Всем доброго времени суток

178
Как нарисовать картинку с помощью OpenGl?

Как нарисовать картинку с помощью OpenGl?

Здравствуйте! Не подскажете, как нарисовать картинку с помощью OpenGl?

153
Делится ли число на 36 [закрыто]

Делится ли число на 36 [закрыто]

Здраствуйте помогите с программой (C++) Вводится одно число которое может быть максимум 1000 значным(соответственно его можно прочесть только...

157
Mutex для двух массивов

Mutex для двух массивов

Здравствуйте!

168