Questo sembra un problema piuttosto semplice, ma non riesco a capirlo. Ho un std::vector
di puntatori grezzi su oggetti derivati, e voglio solo copiarlo su un altro vettore di puntatori Base usando l'operatore di assegnazione. Con VC++ ottengo l'errore C2679 "binary '=': nessun operatore trovato ..." BTW Non voglio una copia profonda degli oggetti, voglio solo copiare i puntatori. Esempio di codice:Provare ad assegnare il vettore di Base * dal vettore di Derivato *
#include <vector>
using namespace std;
struct Base{};
struct Derived: public Base {};
int main (int argc, char* argv[])
{
vector<Derived*> V1;
vector<Base*> V2;
V2 = V1; //Compiler error here
return 0;
}
Ciò che mi confonde è che posso copiare il vettore da loop attraverso di essa e utilizzando push_back
, in questo modo:
for (Derived* p_derived : V1)
V2.push_back(p_derived);
Quindi la mia domanda è: perché non l'assegnazione fallire, mentre push_back
lavori? Sembra la stessa cosa per me.
Suppongo che l'operatore di assegnazione diventerebbe troppo complicato se dovesse accettare vettori di tipi diversi, ma legati. – Carlton
Questa è una (piuttosto comune) FAQ C++ pure. Vedi [questo] (https://isocpp.org/wiki/faq/containers#container-ptr-conversion). – edmz
In C# 'Elenco ' non è correlato a 'Elenco ' ma 'IEnumerable ' è un sottotipo di 'IEnumerable ' perché 'IEnumerable' è variante. –
usr