2015-11-04 57 views
0

我正在嘗試爲節點構建一個類。然而似乎使用拷貝構造像我一樣下面生成錯誤:error: conversion from 'Node<int>*' to non-scalar type 'Node<int>' requested圖的節點類(C++)

編譯點到線Node<int> child= new Node<int>(*(n.returnChildren()[0]));

請注意我的問題的目的是學習C++,我知道我能找到一個網上更好的課程。謝謝

這裏是我的代碼:

#include <iostream> 
#include <string> 
#include <cmath> 
#include <vector> 
#include <iterator> 

using namespace std; 

/* ******************************************************* Node ********************************************************* */ 

template<class T> 
class Node 
{ 
    private: 
     T _value; 
     vector<Node*> children; 

    public: 
     Node(T value); 
     Node(const Node<T>& node); 
     void AddChild(Node<T>* node); 
     T getValue() const; 
     vector<Node<T>*> returnChildren() const; 
     //~Node(); 
}; 

template <class T> 
Node<T>::Node(T value):_value(value) 
{ 
    children.push_back(NULL); 
} 

template <class T> 
Node<T>::Node(const Node& node):_value(node.getValue()), 
           children(node.returnChildren()) 
{ 
} 

template <class T> 
void Node<T>::AddChild(Node* node) 
{ 
    if (children[0]=NULL){children.pop_back();}; 
    children.push_back(node); 
} 

template <class T> 
T Node<T>::getValue() const 
{ 
    return _value; 
} 

template <class T> 
vector<Node<T>*> Node<T>::returnChildren() const 
{ 
    return children; 
} 
/* 
template <class T> 
Node<T>::~Node() 
{ 
    for (vector<Node<T>*>::iterator it=children.begin() ; it!=children.end() ; it++) 
    { 
        delete (*it); 
    } 
}*/ 



int main() 
{ 
    Node<int> n(3); 
    Node<int> nn(4); 
    n.AddChild(&nn); 
    Node<int> child= new Node<int>(*(n.returnChildren()[0])); 
} 
+1

我也許可以幫助編譯器在哪裏出現錯誤標記的位置。 – Wolf

+1

載體兒童;我想你可能真的定義了Node指針的類模板,如下所示:vector *> children; – Netwave

回答

0

一切都在錯誤消息說。 new返回一個指向新創建的對象的指針,而不是對象本身。 使用以下命令行來代替:

Node<int> *child = new Node<int>(*(n.returnChildren()[0])); 

,使用後不要忘記delete child;

更新: 您不需要push_back(NULL)。您最好將矢量留空並取消AddChild中的檢查。

更新2: 順便說一句,這是不是比較,而是分配:

if (children[0]=NULL){;;;};