Code unten kompiliert nicht. Die Zeilen 14 und 15 sind das Problem und ich weiß nicht, wie ich das beheben soll. Wie kann die Template-Funktion geändert werden, um dieses kleine Beispiel zu starten?Verschachtelte Vorlage und Vorlage Fehler in Fehler
Mein Compiler sagt:
error: no matching function for call to 'make'
und
note: candidate template ignored: couldn't infer template
argument 'CONTAINER'
Kompilieren Sie diesen Code:
#include <vector>
template <typename TYPE>
struct Node
{
Node(TYPE & _value) : value(_value) {};
TYPE value;
typename std::vector<Node<TYPE>>::const_iterator first, last;
};
template < template <typename, typename...> class CONTAINER
, typename TYPE
, typename... ARGS >
Node<TYPE> & make (Node<TYPE> & _node
/* not correct */ , typename CONTAINER<TYPE, ARGS...>::const_iterator _first
/* not correct */ , typename CONTAINER<TYPE, ARGS...>::const_iterator _last
, unsigned _k)
{
if (std::distance(_first,_last) < _k)
{
_node.first = _first;
_node.last = _last;
}
return _node;
}
int main()
{
unsigned k = 3;
std::vector<int> dataset;
int i = 4;
Node<int> node(i);
node = make(node, dataset.begin(), dataset.end(), k);
}
Dies ist verwirrend: 'Node' enthält einen' Vektor> :: const_iterator ', den' make() 'aus' dataset.begin() 'zuweisen möchte, aber' dataset' ist ein 'vector ' not a ' Vektor > '. Wie sind diese kompatibel? –