2015-02-09 2 views
0

Я написал этот класс Node:Серию конструкторов

template<class T> 
struct Node{ 
    Node() : content(), col(RED), parent(0), left(0), right(0) {} 
    Node(const Node& orig) : content(orig.content), col(orig.col), parent(orig.parent), left(orig.left), right(orig.right) {} 
    virtual ~Node() {} 
    Node<T>& operator= (const Node<T>& node); 
    template <class sT> 
    friend std::ostream& operator<<(std::ostream& out,const Node<sT>&node); 
    T content; 
    Color col; 
    Node<T> *parent,*left,*right; 
}; 

Теперь я бы создать объект Node с внутри узла с в станд :: пары, и я написал это:

Node<Node< pair<int,char> > > n1 (Node<pair<int,char> >(pair<int,char>(45,'a'))); 

но компилятор выдает мне эту ошибку:

main.cpp:31:84: error: no matching function for call to ‘Node<std::pair<int, char> >::Node(std::pair<int, char>)’ 

Какой точный синтаксис, чтобы получить то, что я хочу?

+4

Вы должны предоставить конструктор подпись как 'Node (сопзИте T & x);', чтобы быть в состоянии сделать это –

+2

Это компилятор дает вам ошибку, не отладчик – chris

ответ

3

Вы пропускаете конструктор:. Node(const T& x);

+0

Это решит синтаксические ошибки, но я не имею в виду значимую реализацию для этого, как видно из контекста OP. (Вот почему неуправляемая поддержка для ответов, которые должны быть комментариями, плоха!). –

Смежные вопросы