2013-07-14 45 views
0

我已經模板類BSTNode敵不過 '運算符=',

BSTNode.h

#ifndef _NODE_BST_H_  
#define _NODE_BST_H_ 

template <class K, class T> 
struct BSTNode 
{ 
typedef K keyType; 
typedef T elementType; 

keyType _key; 
elementType _element; 

BSTNode<keyType,elementType>* _leftChild;    
BSTNode<keyType,elementType>* _rightChild; 


// constructors 
BSTNode(); 
BSTNode<K,T>::BSTNode (keyType, elementType, unsigned int, BSTNode<K,T>*, BSTNode<K,T>*); 

/* 
some methods 
*/ 

BSTNode<K,T>& operator=(const BSTNode<K,T>& nodoBST2); 
}; 

    template <class K, class T> 
    BSTNode<K,T>::BSTNode() 
    { 
    _leftChild=NULL;    
    _rightChild=NULL; 

    } 


    template <class K, class T> 
    BSTNode<K,T>::BSTNode (keyType chiave, elementType elemento, unsigned int altezza, BSTNode* figlioSinistro=NULL, BSTNode* figlioDestro=NULL) 
    { 

    //constuctor code 
    } 



    template <class K, class T>     
    BSTNode<K,T>& BSTNode<K,T>::operator=(const BSTNode<K,T>& nodoBST2) 
    { 

    //operator= code 

    return *this;  
}     
#endif 

的main.c

#include <cstdlib> 
#include <iostream> 

#include "BSTnode.h" 
using namespace std; 

int main(int argc, char *argv[]) 
{ 
    BSTNode<string,string>* node1,node2; 

    node1=NULL; 
    node2=node1; 

    system("PAUSE"); 
    return EXIT_SUCCESS; 
} 

我得到錯誤

no match for 'operator=' in 'node2 = node1' 
candidates are: BSTNode<K, T>& BSTNode<K, T>::operator=(const BSTNode<K, T>&) [with K = std::string, T = std::string] 

即使你有運營商=在BSTNode類匹配所需的簽名。

此外,根據我的經驗,作爲node1,node2指向類BSTNode的指針,我知道其實我甚至不需要operator =。

可能是什麼問題?有人可以看看並幫助我嗎?

提前感謝您的時間。

回答

2
BSTNode<string,string>* node1,node2; 

...解析爲

BSTNode<string,string>* node1; 
BSTNode<string,string> node2; 

...因爲*結合節點1,而不是類型名稱。

你想寫什麼或者是

BSTNode<string,string>* node1, *node2; 

BSTNode<string,string>* node1; 
BSTNode<string,string>* node2; 

後者明顯優於因爲它會阻止您在未來:)做這樣的錯誤。

指針獨立於=運算符,除非要分配原始對象,否則不需要定義。

+0

好的,謝謝你們兩個。 – geraldCelente

1

你知道

BSTNode<string,string>* node1,node2; 

相當於

BSTNode<string,string>* node1; 
BSTNode<string,string> node2; 

如果你知道,那麼對於operator=正確的格式可能應該

node2 = *node1; // where node1 != NULL; 
// Otherwise it should still compile but it leads to segmentation fault during run-time. 

如果你只是想複製指針,所有你需要做的是:

BSTNode<string,string>* node1; 
BSTNode<string,string>* node2; 
node2 = node1; 
+0

好的,謝謝你們倆。 – geraldCelente