Escribí un File clase en File.h. Y escribí Directorio de clase en Directory.h que se incluyen File& vector. Dos encabezado tiene el mismo espacio de nombres.

Aquí está el código:

#include "File.h" 
#include <vector>

class Directory : public File
{
public:
    ...

private:
    std::vector<(File&)> files; 
};

Cuando intento compilar el mismo, se dice:

In file included from Directory.cpp:1:0:
Directory.h:29:30: error: template argument 1 is invalid
         std::vector<(File&)> files; 
                              ^
Directory.h:29:30: error: template argument 2 is invalid
  • Usted no puede tener std::vector de los tipos de referencia. El tipo debe ser replicable. Alguna razón para no usar std::vector<File>?
  • Entonces debo usar punteros? Gracias.
  • Y usted los necesita para? El polimorfismo?
  • De hecho. Debido a esto, no puedo usar un Archivo de vector. Pero std::vector<Archivo>& archivos también funciona supongo
  • No, no funcionará. el mejor es tener vector de punteros inteligentes.
  • Bueno, voy a utilizar el puntero. Gracias.
  • Te perdiste LogicStuff punto. Aunque no es una relación, un puntero inteligente es distinta de un puntero.

InformationsquelleAutor | 2015-12-19

1 Comentario

  1. 6

    A aclarar las cosas para usted, std::vector requiere de sus elementos a ser CopyAssignable, que las referencias no son.

    std::vector<File&> es un vector de referencias a File, tenga en cuenta que std::vector<(File&)> es un error de sintaxis.

    Usted pensó std::vector<File> & iba a funcionar, pero no. Es una referencia a un vector de qué? Objetos. Polimorfismo no trabajo allí. Y necesitaría un real std::vector<File> instancia a la cual recurrir.

    Usted necesita un vector de punteros, que puede ser la copia asignada.

    Si vas con raw punteros, tendrás la necesidad de no olvidar delete antes de quitar cualquier elemento, o te vas a perder memoria (si un objeto se ha asignado en montón, por supuesto). Punteros inteligentes hará eso para usted:

    std::vector<std::shared_ptr<File>> files;
    //or
    std::vector<std::unique_ptr<File>> files;

    Referencia: std::shared_ptr, std::unique_ptr.

Dejar respuesta

Please enter your comment!
Please enter your name here