No es una declaración de clase de plantilla con parámetros implícitos:plantillas con parámetros implícitos, declaración adelantada, C++
list.h
template <typename Item, const bool attribute = true>
class List: public OList <item, attribute>
{
public:
List() : OList<Item, attribute>() {}
....
};
He intentado utilizar la declaración hacia adelante fllowing en un fichero de cabecera diferente :
Analysis.h
template <typename T, const bool attribute = true>
class List;
Pero G ++ muestra este error:
List.h:28: error: redefinition of default argument for `bool attribute'
Analysis.h:43: error: original definition appeared here
Si utilizo la declaración hacia adelante sin parámetros implícitos
template <typename T, const bool attribute>
class List;
compilador no acepta esta construcción
Analysis.h
void function (List <Object> *list)
{
}
y muestra el siguiente error (es decir, no acepta el valor implícito):
Analysis.h:55: error: wrong number of template arguments (1, should be 2)
Analysis.h:44: error: provided for `template<class T, bool destructable> struct List'
Analysis.h:55: error: ISO C++ forbids declaration of `list' with no type
pregunta Actualizado:
me quita el parámetro por defecto de la definición de plantilla:
list.h
template <typename Item, const bool attribute>
class List: public OList <item, attribute>
{
public:
List() : OList<Item, attribute>() {}
....
};
La primera el archivo que utiliza la clase Lista tiene una declaración directa con el valor implícito del atributo de parámetro
Analysis1.h
template <typename T, const bool attribute = true>
class List; //OK
class Analysis1
{
void function(List <Object> *list); //OK
};
La segunda clase utilizando Lista de clases con la definición hacia adelante usando el valor implícito
Analysis2.h
template <typename T, const bool attribute = true> // Redefinition of default argument for `bool attribute'
class List;
class Analysis2
{
void function(List <Object> *list); //OK
};
La segunda clase utilizando la lista de clase sin definición hacia adelante usando el valor implícito
Analysis2.h
template <typename T, const bool attribute> // OK
class List;
class Analysis2
{
void function(List <Object> *list); //Wrong number of template arguments (1, should be 2)
};
bien entiendo su problema. Es porque usted agrega la declaración directa en cada archivo donde * usa * 'Lista'. NO HAGAS ESO. En su lugar, agregue la declaración forward en 'List.h' donde * define * la' Lista' ** y ** '#include" List.h "' en cada archivo donde use 'List'. ¡Avíseme si todavía tiene problemas! – Nawaz
¿cuál es su pregunta después de la actualización? – UmmaGumma