Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    165

    [C++] Inizializzare membro std::vector<std::string>

    Penso di essermi perso in un bicchiere d'acqua, ma da solo non ne vengo a una.
    codice:
    class prova
    {
      public:
        prova(std::vector<std::string>& lista);
      private:
        std::vector<std::string> mLista;
    }
    Il costruttore dovrebbe inizializzare mLista con lista, ma qui nascono i problemi.
    Se al posto di creare lista a parte e poi darla in pasto al costruttore, provo a creare direttamente il vector, non funziona. Dove sbaglio?
    codice:
    prova(std::vector<std::string>({"uno","due","tre"}));
    Scusate se la domanda può sembrare stupida, ma non trovo la soluzione.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,389
    Non è possibile collegare un oggetto creato "al volo" a un reference, ma può essere collegato a un const reference. Risolvi così:
    codice:
    class prova
    {
      public:
        prova(const std::vector<std::string>& lista) : mLista(lista) {}
      private:
        std::vector<std::string> mLista;
    };
    o meglio così:
    codice:
    class prova
    {
      public:
        prova(std::vector<std::string> lista) : mLista(std::move(lista)) {}
      private:
        std::vector<std::string> mLista;
    };
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it L'avatar di ing82
    Registrato dal
    Sep 2014
    Messaggi
    165
    Grazie, ci stavo sbattendo la testa da troppo tempo.
    E pensare che cerco di mettere il const appena possibile, questa volta me ne sono dimenticato, e infatti non mi spiegavo come mai tutte le altre volte il medesimo meccanismo funzionasse e questa volta no.
    Grazie.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,389
    Comunque ti invito a riflettere sul secondo esempio che ho scritto. Fa la stessa cosa del primo e supporta anche la move semantics.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2020 vBulletin Solutions, Inc. All rights reserved.