Sto facendo un'implementazione POC e come requisito ho bisogno di estendere std :: vector insert API che prenderebbe solo un singolo parametro (valore da inserire) e internamente il codice sarebbe aggiungere questo alla fine del contenitore.Non in grado di sovraccaricare le funzioni std :: vector esistenti
Ho creato una classe personalizzata (ValVector) derivata da std :: vector e definita un'API di inserimento personalizzata che accetta un singolo parametro ma durante la sua compilazione l'errore genera.
Apprezzo per la risposta rapida.
Di seguito si riporta il frammento di codice con il messaggio di errore: Messaggio
#include <iostream>
#include <vector>
using namespace std;
typedef bool BOOL;
template<class T, class Allocator = allocator<T>>
class ValVector : public std::vector<T, Allocator> {
public:
BOOL insert(const T& elem) { return (this->insert(this->end(),elem)!=this->end()); }
};
int main()
{
std::vector<int> myvector (3,100);
std::vector<int>::iterator it;
myvector.push_back (200);
ValVector<int> mKeyAr;
mKeyAr.insert(10); //
std::cout << "myvector contains:";
for (auto it=mKeyAr.begin(); it<mKeyAr.end(); it++)
std::cout << ' ' << *it;
std::cout << '\n';
return 0;
}
Errore:
In instantiation of 'BOOL ValVector<T, Allocator>::insert(const T&) [with T = int; Allocator = std::allocator<int>; BOOL = bool]':
23:19: required from here
11:72: error: no matching function for call to 'ValVector<int>::insert(std::vector<int>::iterator, const int&)'
11:72: note: candidate is:
11:10: note: BOOL ValVector<T, Allocator>::insert(const T&) [with T = int; Allocator = std::allocator<int>; BOOL = bool]
11:10: note: candidate expects 1 argument, 2 provided In member function 'BOOL ValVector<T, Allocator>::insert(const T&) [with T = int; Allocator = std::allocator<int>; BOOL = bool]':
11:88: warning: control reaches end of non-void function [-Wreturn-type]
+1 , codice completo, minimo, descrizione completa dell'errore, descrizione concisa del problema e perché viene tentato. –
È meglio non ereditare pubblicamente da 'std :: vector', se non sbaglio il suo distruttore non è dichiarato come virtuale. –
@ burton0 - Il distruttore non virtuale è ok, a patto di non cancellare un 'ValVector' usando un puntatore a' std :: vector'. –