инициализировать объект шаблона

0

У меня есть небольшой вопрос... У меня есть этот шаблонный класс, он делает двумерный массив:

template <typename T, unsigned P>

class mapa {
private:
    T **mat;
    unsigned tam;

public:
    mapa(T &dato);
    mapa(const mapa& orig);
    virtual ~mapa();
    mapa<T, P> &operator=(const mapa<T, P> &orig);
    T &operator()(unsigned i, unsigned j);
};

template <class T, unsigned P>
mapa<T, P>::mapa(T &dato) {
    tam = P;
    mat = new T**[tam];
    for (unsigned i = 0; i < P; i++) {
        mat[i] = new T*[tam];
        for (unsigned j = 0; j < P; j++) {
            mat[i][j] = dato;
        }
    }
}

template <class T, unsigned P>
mapa<T, P>::~mapa() {
    for (unsigned i = 0; i < tam; i++) {
        delete mat[i];
    }
    delete mat;
}

template <typename T, unsigned P>
T &mapa<T, P>::operator ()(unsigned i, unsigned j) {
    /*if (i < 0 || i >= tam) {
        throw ErrordeRango("Posición de memoria inexistente.");
    }
    if (j < 0 || j >= tam) {
        throw ErrordeRango("Posición de memoria inexistente.");
    }
    if (k < 0 || k >= tam) {
        throw ErrordeRango("Posición de memoria inexistente.");
    }
    return mat[i][j][k];*/

}

template <typename T, unsigned P>
mapa<T, P> &mapa<T, P>::operator=(const mapa<T, P> &orig) {

    tam = orig.tam;
    mat = new T**[tam];
    for (unsigned i = 0; i < P; i++) {
        mat[i] = new T*[tam];
        for (unsigned j = 0; j < P; j++) {
            mat[i][j] = orig[i][j];
        }
    }
    return mat;
}

Я хочу использовать его в следующем классе:

class museo
{
    int sizeStep;
    mapa<objetoMuseo*, 50> mapaMuseo;

public:
    museo();
    ~museo();

    void visualizar();
};

Как создать конструктор в museo.cpp для инициализации объекта шаблона?

Теги:
templates

1 ответ

1
Лучший ответ

Вы можете инициализировать свои поля, используя списки инициализации.

museo::museo()
: sizeStep(0), 
  mapaMuseo(???)
{
}

где, конечно, между??? вы должны добавить ссылку на указатель objectoMuseo, как это требует конструктор.

  • 0
    Извините, я снова здесь. Я делаю это objetoMuseo * vacio = NULL; mapaMuseo = новый mapa (vacio); Но это неправильно = S
  • 0
    Пожалуйста, опубликуйте полный пример кода, чтобы описать, что вы пытаетесь сделать, а что не работает? Проблемы с компиляцией / неожиданным поведением?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню