Ich habe 2 Klassen, die Vorlagen mit 2 Argumente, MinHeap und HeapNode verwenden. Ich erstelle ein MinHeap-Objekt in der Hauptsache, das einen Vektor innerhalb der Klasse erzeugt, und danach rufe ich die Funktion insert auf, die einen HeapNode in den MinHeap-Vektor einfügt.Get Variable Typ Name
Das Problem erscheint, wenn in insert-Methode ich keine HeapNode erstellen kann, weil die Variablentypen vom Compiler nicht gefangen gibt mir diesen Fehler:
Typen/Wert Mismatch bei Argumente 1 in der Liste Template-Parameter für ' Template-Klasse HeapNode 'Heap.push_back (HeapNode (Schlüssel, Wert));
Hauptcode:
MinHeap<int,string> vector();
vector.insert(2,"Hola");
Insert Funktionscode:
void MinHeap<T,V>::insert(T key, V value){
Heap.push_back(HeapNode<typeid(key).name(),typeid(value).name()>
(key,value));
}
HeapNode Klassencode:
#ifndef HEAPNODE_H
#define HEAPNODE_H
template <class T, class V>
class HeapNode {
public:
HeapNode(T newKey, V newValue);
HeapNode(const HeapNode& orig);
virtual ~HeapNode();
T getKey();
void setKey(T newKey);
V getValue();
void setValue(V newValue);
private:
T key;
V value;
};
template <class T, class V>
HeapNode<T,V>::HeapNode(T newKey, V newValue){
this->key = newKey;
this->value = newValue;
}
template <class T, class V>
T HeapNode<T,V>::getKey(){
return key;
}
template <class T, class V>
void HeapNode<T,V>::setKey(T newKey){
this->key = newKey;
}
template <class T, class V>
V HeapNode<T,V>::getValue(){
return value;
}
template <class T, class V>
void HeapNode<T,V>::setValue(V newValue){
this->value = newValue;
}
#endif /* HEAPNODE_H */
MinHeap Klassencode:
#ifndef MINHEAP_H
#define MINHEAP_H
#include "HeapNode.h"
#include <vector>
#include <iterator>
#include <typeinfo>
#include <iostream>
using namespace std;
template <class T, class V>
class MinHeap {
public:
MinHeap();
MinHeap(const MinHeap& orig);
virtual ~MinHeap();
T size();
T empty();
void insert(T key,V value);
T min();
T minValues();
void removeMin();
void printHeap();
void removeMinAux(T i);
private:
std::vector<T,V> Heap;
void swap(HeapNode<T,V>* parent, HeapNode<T,V>* child);
};
/*
template <class T, class V>
MinHeap<T,V>::~MinHeap(){
delete Heap;
}*/
template <class T, class V>
void MinHeap<T,V>::insert(T key, V value){
Heap.push_back(HeapNode<typeid(key).name(),typeid(value).name()>(key,value));
}
template <class T, class V>
T MinHeap<T,V>::empty(){
return Heap.empty();
}
template <class T, class V>
T MinHeap<T,V>::size(){
return Heap.size();
}
template <class T, class V>
T MinHeap<T,V>::min(){
return Heap.front().getKey();
}
template <class T, class V>
T MinHeap<T,V>::minValues(){
return Heap.front().getValue();
}
template <class T, class V>
void MinHeap<T,V>::removeMin(){
Heap.front() = Heap.back();
Heap.pop_back();
removeMinAux(0);
}
template <class T, class V>
void MinHeap<T,V>::removeMinAux(T i){
if(Heap.at(i*2+1)== 0){
cout<< "Heap has been reordenated"<<endl;
}else{
if(Heap.at(i*2+1).getKey()<Heap.at(i*2+2).getKey()){
swap(Heap.at(i*2+1),Heap.at(i));
removeMinAux(i*2+1);
}else{
swap(Heap.at(i*2+2),Heap.at(i));
removeMinAux(i*2+2);
}
}
}
template <class T, class V>
void MinHeap<T,V>::swap(HeapNode<T,V>* parent, HeapNode<T,V>* child){
T tmp;
tmp = *child;
*child = *parent;
*parent = tmp;
delete tmp;
}
#endif /* MINHEAP_H */
^
Code und Frage zeigt ein grundlegendes Missverständnis des [typeid Operator] (http://en.cppreference.com/w/cpp/language/typeid). – IInspectable
MinHeap Vektor(); scheint falsch, es ist kein Vektor - ohne die Klammer? –
Wenn Ihre Frage zufriedenstellend beantwortet wurde, wäre es nett, wenn Sie die Antwort als "akzeptiert" markieren und wenn Sie sie als besonders hilfreich empfinden. Vielen Dank! – Rook