我有模板类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 =。
可能是什么问题?有人可以请一看,帮助我吗?
提前感谢您的时间。
答案 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;