Ich mache eine POC-Implementierung und je nach Anforderung muss ich STD :: Vector einfügen API, die nur einzelne Parameter (Wert einzufügen) würde und intern würde der Code würde Füge dies am Ende des Behälters hinzu.Nicht in der Lage, vorhandene std :: vector Funktionen zu überladen
Ich erstellt eine benutzerdefinierte Klasse (ValVector) abgeleitet von Std :: Vektor und definierte eine benutzerdefinierte Insert-API, die einzelne Parameter akzeptiert, aber während der Kompilierung löst Fehler.
Schätzen Sie für schnelle Antwort.
unten ist das Snippet-Code mit Fehlermeldung:
#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;
}
Fehlermeldung:
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 , vollständiger, minimaler Code, vollständige Fehlerbeschreibung, kurze Beschreibung des Problems und warum dies versucht wird. –
Ich sollte besser nicht von 'std :: vector' erben, wenn ich mich nicht irre, wird sein Destruktor nicht als virtuell deklariert. –
@ burton0 - Der nicht-virtuelle Destruktor ist in Ordnung, solange Sie keinen 'ValVector' mit einem Zeiger auf' std :: vector' löschen. –