不匹配'operator ='in

时间:2013-07-14 22:28:44

标签: c++ operators operator-overloading no-match

我有模板类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类中有operator =匹配所需的签名。

此外,作为node1,node2指向BSTNode类的指针,根据我的经验,我知道其实我甚至不需要operator =。

可能是什么问题?有人可以请一看,帮助我吗?

提前感谢您的时间。

2 个答案:

答案 0 :(得分:2)

BSTNode<string,string>* node1,node2;

...被解析为

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

...因为*绑定到node1而不是类型名称。

你想写的是

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

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

后者显然是优越的,因为它可以防止你在将来犯这样的错误:)。

指针独立于=运算符,除非要分配原始对象,否则不需要定义。

答案 1 :(得分: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;