Wykonuję implementację POC i zgodnie z wymogiem muszę rozszerzyć interfejs API wstawki std :: vector, który wymagałby tylko jednego parametru (wartość do wstawienia) i wewnętrznie kod byłby dodaj to na końcu kontenera.Nie można przeciążać istniejących funkcji std :: vector
Stworzyłem niestandardową klasę (ValVector) wyprowadzoną ze std :: vector i zdefiniowałem niestandardowy interfejs API Insert, który akceptuje pojedynczy parametr, ale podczas kompilowania go zgłasza błąd.
Doceń za szybką odpowiedź.
Poniżej znajduje się fragment kodu z komunikatem o błędzie: Komunikat
#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;
}
Błąd:
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 , kompletny, minimalny kod, pełny opis błędu, zwięzły opis problemu i przyczyna tego. –
Nie powinienem publicznie dziedziczyć po 'std :: vector', jeśli się nie mylę, jego destruktor nie jest zadeklarowany jako wirtualny. –
@ burton0 - Nie wirtualny destruktor jest w porządku, o ile nie usuniesz 'ValVectora' używając wskaźnika do 'std :: vector'. –