[C con Clase] ayuda con un template

omar mendoza omar.p9 en gmail.com
Dom Jun 19 10:15:28 CEST 2011


hola a todos, tengo una clase template de la siguiente manera

#ifndef _Map_
#define _Map_

#include <map>
#include <utility>
#include <string>

using namespace std;

template <class T>

// Represents a dictionary
// key --> value
// @author Omar Mendoza
// @date May 2011
// @version 0.0.1
class Map {

protected:

/// STL dictionary
map<string, T *> var;

public:
               //aquí van varios métodos tipo get y set

}
#endif


y la ocupo de la siguiente forma


#ifndef __GenUnitsXML__
#define __GenUnitsXML__
#include <string>
#include "Map.hpp"
#include "GenericUnit.hpp"
#include "SpecificUnit.hpp"
#include "LinearFunc.hpp"
#include "Function.hpp"
#include <libxml/xmlmemory.h>
#include <libxml/parser.h>

using namespace std;

class GenUnitsXML {

protected:

    Map<GenericUnit> *generics;
    Map<SpecificUnit> *specifics;
    Map<SpecificUnit> *sysunits;

public:

   // los métodos q me interesan son estos tres
   // como ven son los get de cada atributo

    Map<GenericUnit> *getGenerics();

    Map<SpecificUnit> *getSpecifics();

    Map<SpecificUnit> *getSysUnits();

}

#endif

tal vez m falte sintaxis aquí para explicarles, pero el programa compila y
al ejecutarlo sale "violación de segmento" al hacer lo siguiente en otra
clase

         Map<SpecificUnit>  *sp = new Map<SpecificUnit>;

  sp = units->getSpecifics();


donde units es

GenUnitsXML *units = new GenUnitsXML;

usando valgrind me dice lo siguiente


33.800000
0.304800
en factorTO
despues de Map
tam ma 0
==6523== Use of uninitialised value of size 8
==6523==    at 0x401CFE: GenUnitsXML::getSpecifics() (GenUnitsXML.cpp:16)
==6523==    by 0x4060CB: Units::factorTo(char const*) (Units.cpp:19)
==6523==    by 0x406E9C: main (main.cpp:10)
==6523==
==6523== Invalid read of size 8
==6523==    at 0x401CFE: GenUnitsXML::getSpecifics() (GenUnitsXML.cpp:16)
==6523==    by 0x4060CB: Units::factorTo(char const*) (Units.cpp:19)
==6523==    by 0x406E9C: main (main.cpp:10)
==6523==  Address 0x8 is not stack'd, malloc'd or (recently) free'd
==6523==

no sé por qué hay un error en getSpecifics(), pues solo es un método q
devuelve un atributo, es decir, es un   get.
Alguien que me pueda orientar??
Saludos y gracias


-- 
Omar Jonathan Mendoza Bernal
"Las cicatrices nos recuerdan que el pasado fue real" Dr. Lecter en Dragón
Rojo
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20110619/d42f1871/attachment.html>


Más información sobre la lista de distribución Cconclase