Errore funzioni con std::vector

di il
3 risposte

Errore funzioni con std::vector

Salve a tutti.
Sto lavorando su VS15 ma sto provando ad abbandonare le comode implementazioni CLI fornite da esso. E' quindi la prima volta che uso std::vector.
Ho questa classe splittata, essa è solo un contenitore per una lista unica, contenente un tipo da me definito "Animale"

class TipiAnimale
	{
		static std::vector<Animale> ListaTipi;
       
	public:
		static int TipiAnimale::ListaTipiCount();
		static Animale TipiAnimale::GetTipoAnimale(int a);
		static void TipiAnimale::AddTipoAnimale(Animale a);
		static void TipiAnimale::RmvTipoAnimale(int a);
		static void TipiAnimale::ClearListaTipi();

	};
	
	

int TipiAnimale::ListaTipiCount() { return ListaTipi.size(); }
	Animale TipiAnimale::GetTipoAnimale(int a) { return ListaTipi.at(a); }
	void TipiAnimale::AddTipoAnimale(Animale a) 
	{ 
		ListaTipi.push_back(a); 
	}
	void TipiAnimale::RmvTipoAnimale(int a) { ListaTipi.erase(ListaTipi.begin() + a); }
	void TipiAnimale::ClearListaTipi() { ListaTipi.clear(); }
In fase di compilazione da questo errore:
C2280 'Animale &Animale::operator =(const Animale &)': tentativo di fare riferimento a una funzione eliminata TentativoCLR
e localizza l'errore in "xutility", facente parte delle STD, subito dopo il ciclo for:

		// TEMPLATE FUNCTION move
template<class _InIt,
	class _OutIt> inline
	_OutIt _Move(_InIt _First, _InIt _Last,
		_OutIt _Dest, _Nonscalar_ptr_iterator_tag)
	{	// move [_First, _Last) to [_Dest, ...), arbitrary iterators
	for (; _First != _Last; ++_Dest, (void)++_First)
		*_Dest = _STD move(*_First);
	return (_Dest);
	}
Suppongo mi sia sfuggito qualcosa del loro funzionamento. Grazie!

3 Risposte

  • Re: Errore funzioni con std::vector

    Posta il codice della classe animale (sia definizione che dichiarazione) così magari è più facile capire il problema.
  • Re: Errore funzioni con std::vector

    GestoreDati.h
    
    #include <string>
    #include <array>
    #include <vector>
    
    
    	class Animale
    	{
    
    		//dati costanti per l'animale
    		const int Inf;
    		const int Adu;
    		const int Vmx;
    		const int Fgl;
    		const int Quie;
    		const std::array<bool, 12> Mes;
    		const int Ide;
    		const int Grand;
    		std::wstring Nome;
    		std::wstring Alim;
    		std::wstring Colore;
    		const bool Femmina;
    
    		//dati che variano runtime
    		bool Spostami;
    		bool Cancellami;
    		int MeseNascita;
    		int EtaAttuale;
    		bool Accompagnato;
    		bool Marcato;
    		bool Esente;
    	public:
    		//funzioni riferite a costanti && uguali per tutti i tipi
    		const int  Animale::GetGrand();
    		const std::wstring Animale::GetAlim();
    		const std::wstring Animale::GetColor();
    		const int Animale::GetVmx();
    		const std::array<bool, 12> Animale::GetListaMesi();
    		const int Animale::GetIde();
    		const int Animale::GetFgl();
    		const bool Animale::Val1Mese(int i);
    		const std::wstring DatManoFun(int i);
    
    
    		//funzioni riferite a variabili && uguali per tutti i tipi
    		/*int Animale::GetEsente();
    		void Animale::SetEsente(bool set);
    		bool Animale::GetSpostami();
    		bool Animale::GetCancellami();
    		void Animale::SetCancellami(bool tf);
    		void Animale::SetSpostami(bool tf);
    		bool Animale::GetFem();
    		bool Animale::GetAccompagnato();
    		void Animale::SetAccompagnato(bool tf);
    		int Animale::GetPeriodoVitale();
    		void Animale::SetMeseNascita(int mese);
    		int Animale::GetMeseNascita();
    		void Animale::Cresci();
    		int Animale::GetEtaAtt();*/
    
    		
    		Animale(int ide, std::wstring numen, int inf, int adu, int vmx, int fgl, int lung, std::array<bool, 12> mes, std::wstring colore, std::wstring alim, int quie, bool fem);
    		~Animale();
    		
    
    	};
    
    	class TipiAnimale
       {
          static std::vector<Animale> ListaTipi;
           
       public:
          static int TipiAnimale::ListaTipiCount();
          static Animale TipiAnimale::GetTipoAnimale(int a);
          static void TipiAnimale::AddTipoAnimale(Animale a);
          static void TipiAnimale::RmvTipoAnimale(int a);
          static void TipiAnimale::ClearListaTipi();
    
       };
       
    
    GestoreDati.cpp
    
    #include "GestoreDati.h"
    using namespace std;
    
    	const int  Animale::GetGrand() { return Grand; }
    	const wstring Animale::GetAlim() { return Alim; }
    	const wstring Animale::GetColor() { return Colore; }
    	const int Animale::GetVmx() { return Vmx; }
    	const array<bool, 12> Animale::GetListaMesi() { return Mes; }
    	const int Animale::GetIde() { return Ide; }
    	const int Animale::GetFgl() { return Fgl; }
    	const bool Animale::Val1Mese(int i) { return Mes[i]; }
    	const wstring Animale::DatManoFun(int i)
    	{
    		array<wstring, 5> DatiMano{ Colore, Nome, to_wstring(Vmx), to_wstring(Grand), Alim };
    		return DatiMano[i];
    	}
    
    	Animale::Animale(int ide, wstring numen, int inf, int adu, int vmx, int fgl, int lung, array<bool, 12> mes, wstring colore, wstring alim, int quie, bool fem) :
    		Ide(ide), Nome(numen), Inf(inf), Adu(adu), Vmx(vmx), Fgl(fgl), Grand(lung), Mes(mes), Colore(colore), Alim(alim), Quie(quie), Femmina(fem)
    	{
    
    	}
    
    	Animale::~Animale()
    	{
    	}
    	
       int TipiAnimale::ListaTipiCount() { return ListaTipi.size(); }
       Animale TipiAnimale::GetTipoAnimale(int a) { return ListaTipi.at(a); }
       void TipiAnimale::AddTipoAnimale(Animale a) 
       { 
          ListaTipi.push_back(a); 
       }
       void TipiAnimale::RmvTipoAnimale(int a) { ListaTipi.erase(ListaTipi.begin() + a); }
       void TipiAnimale::ClearListaTipi() { ListaTipi.clear(); }
    
  • Re: Errore funzioni con std::vector

    Ho risolto cercando nel web!

    A quanto pare std::vector ha bisogno di essere inizializzata, ho aggiunto nel .cpp
    vector<Animale> TipiAnimale::ListaTipi;
    Anche se non mi è ben chiaro perchè, funziona.
Devi accedere o registrarti per scrivere nel forum
3 risposte