2011-04-17 15 views
7

He buscado una solución a mi problema y he encontrado muchas referencias cíclicas y problemas de espacio de nombres (no se aplican en mi caso) , pero nada como el problema que estoy teniendo.C++: "error: nombre de clase esperado antes de '{' token" al heredar una clase de plantilla

que tienen una clase de plantilla definida e implementada en matemáticas/matrix.h:

template<class T> 
class Matrix 
{ 
public: 
    // constructors, destructors and what not... 
}; 

he definido y puesto en práctica en matemáticas otra clase de plantilla/vector.h

#include <maths/matrix.h> 

template<class T> 
class Vector : public Matrix 
{ 
public: 
    // constructors, destructors and what not... 
}; 

consigo este error "esperado class-name before '{' token" en vector.h que realmente me está molestando. No tiene nada que ver con que matrix.h y vector.h estén en una subcarpeta de matemáticas porque puedo usar matrix.h en otras partes de mi aplicación sin ningún problema. Creo que tiene algo que ver con el hecho de que Matrix es una clase de plantilla porque cuando hago de Vector una subclase de una clase sin plantilla (SomeClass.h por ejemplo) todo compila bien.

Muchas gracias a cualquier persona que pueda ayudar :)

Respuesta

11

Se necesitan heredar de la clase concreta, es decir, desde Matrix<T>, no sólo Matrix:

template<class T> 
class Vector : public Matrix<T> 
{ 
    … 
}; 
+0

OMG ¡Soy tan novato! gracias que funcionó una delicia :) –

5

Te falta dos cosas.

template<typename T> 
class Vector : public Matrix <T> //<----- first : provide the type argument 
{ 

}; //<-------- second : semi-colon (same from Matrix class also) 
+0

muchas gracias funcionó :) –

Cuestiones relacionadas