2014-12-05 74 views
0
我有一个小问题...... 我有这样的模板类

,它使一个二维数组:initializate模板对象

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中的构造函数初始化模板对象?

回答

1

您可以使用初始化列表初始化您的字段。

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

当然,之间的???您应该添加对objectoMuseo指针的引用,因为这是构造函数所要求的。

+0

对不起,我又来了。我在做 objetoMuseo * vacio = NULL; mapaMuseo = new mapa(vacio); 但它是错误的= S – 2014-12-06 19:05:32

+0

请发布完整的代码示例来描述你正在尝试做什么,什么不工作?遇到编译/意外行为? – 2014-12-08 12:04:30

+0

我修好了!问题出在这里: mapaMuseo = new mapa(vacio); 它应该是: mapaMuseo = new mapa (vacio); 非常感谢! – 2014-12-09 17:28:36